Hallo Forum, ich hab da wieder ein Problem!
Ich habe eine riesiges SQL-Statement (wird generiert per PHP). Das nur mal so nebenbei....
Ich habe eine Tabelle mit geodaten (Längengrade, Breitengrade und PLZ) und nun möchte ich dem SQL-Statment bei bedarf eine weitere Where-Klausel anhängen die mir nur Resultate liefert wenn die sich in einem bestimmten Gebiet aufhalten.
Per PLZ schaue ich in die DB um die Koordinaten zu bekommen.
Nun wende ich eine komplizierte Formel an die mir alle Postleitzahlen im angegebenen Radius berechnet und zurückliefert.
So weit so gut.
Nun habe ich dieses in eine Unterabfrage verpackt:
So, nun meine Frage:
Ist dies nicht ziemlich Zeitaufwendig wenn ich das per Subselect löse ?
Gibt es eine weitere Möglichkeit dies zu realisieren die eventuell schneller funzt ?
Per inner Join die Tabelle zu verknüpfen geht nicht da ich nicht vom jeweiligen Datensatz die Breiten und Längengrade benutzen will sondern eine feste allgemeingültige (vorher in erfahrung gebracht) benutze.
Aber die Tabelle per inner join mit einzubeziehen (also ohne Verknüpfung mit ON-Bedingung) funktioniert nicht weil a) alles sehr lange dauert (ca. 19 Sekunden) und b) ich doppelt gemoppelte Resultate widerbekomme und zwar so viele wie die Geodaten-Tabelle Einträge hat.....ist ja klar....
Hat einer von euch eine Idee oder soll ich das mit dem Subselekt so lassen ? Mich würde es wurmen wenn ich das so lasse aber weis das das noch eleganter bzw. besser und schneller funktionieren könnte (auch wenn es jetzt nichts zu bemängeln gibt bei der Abfrage, aber wie sieht es aus wenn viele darauf abfragen ?)
Hoffe ihr habt mein Problem sowiet verstanden......
Ich habe eine riesiges SQL-Statement (wird generiert per PHP). Das nur mal so nebenbei....
Ich habe eine Tabelle mit geodaten (Längengrade, Breitengrade und PLZ) und nun möchte ich dem SQL-Statment bei bedarf eine weitere Where-Klausel anhängen die mir nur Resultate liefert wenn die sich in einem bestimmten Gebiet aufhalten.
Per PLZ schaue ich in die DB um die Koordinaten zu bekommen.
Nun wende ich eine komplizierte Formel an die mir alle Postleitzahlen im angegebenen Radius berechnet und zurückliefert.
So weit so gut.
Nun habe ich dieses in eine Unterabfrage verpackt:
Code:
..where plz in(Select plz from geodat where ...Formel)..
So, nun meine Frage:
Ist dies nicht ziemlich Zeitaufwendig wenn ich das per Subselect löse ?
Gibt es eine weitere Möglichkeit dies zu realisieren die eventuell schneller funzt ?
Per inner Join die Tabelle zu verknüpfen geht nicht da ich nicht vom jeweiligen Datensatz die Breiten und Längengrade benutzen will sondern eine feste allgemeingültige (vorher in erfahrung gebracht) benutze.
Aber die Tabelle per inner join mit einzubeziehen (also ohne Verknüpfung mit ON-Bedingung) funktioniert nicht weil a) alles sehr lange dauert (ca. 19 Sekunden) und b) ich doppelt gemoppelte Resultate widerbekomme und zwar so viele wie die Geodaten-Tabelle Einträge hat.....ist ja klar....
Hat einer von euch eine Idee oder soll ich das mit dem Subselekt so lassen ? Mich würde es wurmen wenn ich das so lasse aber weis das das noch eleganter bzw. besser und schneller funktionieren könnte (auch wenn es jetzt nichts zu bemängeln gibt bei der Abfrage, aber wie sieht es aus wenn viele darauf abfragen ?)
Hoffe ihr habt mein Problem sowiet verstanden......
Kommentar