Re: mehrere BETWEEN - Abfrage (Umkreissuche)
am 22.11.2006 14:13:22 von Claus ReibensteinJens Steinführer schrieb:
> Zum Verständnis: ich möchte die Orte aus einer Tabelle lesen, die
> sich z.B. 10km vom Ursprungsort befinden. Da vorhandene Systeme sehr
> umfangreich sind (von den Berechnungen her,etc.), hab ich aus der
> Radiussuche eine Quadratsuche gemacht (also 10 links, rechts, oben und
> unten).
Ich stand mal vor genau dem gleichen Problem und habe einen anderen
Lösungsansatz versucht: ich habe eine Entfernungstabelle erzeugt. Als
maximale Entfernung habe ich 50 km gewählt und dabei eine Tabelle mit
ca. 1,7 Millionen Einträgen erhalten (ohne Begrenzung wären es ca. 70
Millionen geworden). Die Erzeugung dieser Tabelle hat einmalig ca. 3,5
Stunden in Anspruch genommen. Alle darauf aufbauenden Suchen sind jedoch
rasend schnell, und ich kann auch problemlos nach Entfernung sortieren.
> Der Aufruf nach den Erstellen der Variablen lautet bei mir:
>
> $result1 = mysql_query("SELECT id FROM gort WHERE (laenge BETWEEN
> '$lang_o2' AND '$lang_u2') AND (breite BETWEEN '$breite_o2' AND
> '$breite_u2) ORDER BY ort ASC;");
Warum setzt Du die Längen bzw. Breiten in Anführungsstriche? Sind sie in
der Datenbank nicht als numerische Werte enthalten? Die
Anführungsstriche sollten zwar eigentlich kein Problem darstellen, aber
man weiß ja nie.
> Aber komischerweise werden nicht alle in Frage kommenden Orte
> angezeigt. Kann jemand mir mal sagen, ob die SQL-Anweisung einen
> Logikfehler hat bzw. wie dann der Ansatz sein sollte?
Die Werte für $lang_o2, $lang_u2, $breite_o2 und $breite_u2 hast Du
geprüft? Die fehlenden Orte stehen auch mit den richtigen Werten in der DB?
Ansonsten wüsste ich nicht, was da falsch sein könnte.
Übrigens:
dahin um.
Gruß. Claus
--
,~°O O
O
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /