Umkreissuche Eingabe mit einschließen

denyo

Benutzer
Beiträge
8
Servus!
Ich probiere gerade eine Umkreissuche zu implementieren, das klappt dank openGeoDB auch super, nur schaffe ich es nicht beim Ergebnis auch die eingegebene Stadt mit anzuzeigen.
BSP:

Input: ID von München
Output: Augsburg, Starnberg usw nur nicht München.

Hier der Code:

SELECT
dest.zip,
dest.location_name,
ACOS(
SIN(RADIANS(src.lat)) * SIN(RADIANS(dest.lat))
+ COS(RADIANS(src.lat)) * COS(RADIANS(dest.lat))
* COS(RADIANS(src.lon) - RADIANS(dest.lon))
) * 6380 AS distance
FROM coordinates dest
CROSS JOIN coordinates src
WHERE src.id = 5191
HAVING distance < 10
ORDER BY distance;

Natürlich sollte dann auch bei der Sortierung München auch oben sein mit Distance 0.

Was denkt ihr?
 
Werbung:
Schonmal nachgerechnet was du für einen "distance"-Wert für München hast? Ich hab keine Werte... Aber ich könnte mir vorstellen das es mehr als 10 ist...
 
Schonmal nachgerechnet was du für einen "distance"-Wert für München hast? Ich hab keine Werte... Aber ich könnte mir vorstellen das es mehr als 10 ist...
Er kann eigentlich nur 0 oder NULL sein, ich vermute letzteres. Insofern könnte man die HAVING Klausel auch um OR distance IS NULL erweitern.
 
der erste Vorschlag klappt, jetzt hat sich aber die Anfragezeit von 0,0005 sec zu 132sec gesteigert :D

OR distance IS NULL klappt wunderbar, danke!
Das habe ich davor auch probiert, nur leider mit distance = 0
 
Angenommen ich möchte alle Inserate anzeigen lassen, die im Umkreis sind.

SELECT * FROM inserat WHERE geo_id =
(SELECT
dest.id,
ACOS(
SIN(RADIANS(src.lat)) * SIN(RADIANS(dest.lat))
+ COS(RADIANS(src.lat)) * COS(RADIANS(dest.lat))
* COS(RADIANS(src.lon) - RADIANS(dest.lon))
) * 6380 AS distance
FROM coordinates dest
CROSS JOIN coordinates src
WHERE src.id = 5191
HAVING distance < 10 OR distance is NULL
);

Das geht natürlich so nicht, muss ich in der ersten Zeile IN verwenden?
 
Werbung:
IN wäre eine Möglichkeit, dann darf aber dest.id im Subselect nicht mit NULL zurück gegeben werden.
 
Zurück
Oben