Sagen, ich habe drei Tabellen wie folgt:MySQL nächstgelegenen Standort nur wählen, wenn auch neueste Standort
cities
------
name
latitude
longitude
stalls
------
id
name
locations
---------
stall_id
latitude
longitude
date
Ich möchte die nächsten Stände in eine Stadt innerhalb der letzten 6 Monate zu finden. Dieser Teil ist in Ordnung - ich frage die Tabelle "Ställe/Orte" ab und benutze Haversine, um in die Ferne zu kommen. Alles gut.
Dies ist meine aktuelle Abfrage:
SELECT stalls.name, (3959 * acos(cos(radians($lat)) * cos(radians(locations.lat)) * cos(radians(locations.lng) - radians($lng)) + sin(radians($lat)) * sin(radians(locations.lat)))) AS distance
FROM locations
LEFT JOIN stalls ON stalls.id = locations.trader_id
WHERE locations.added > $date
HAVING distance < 10
Es ist jedoch möglich, dass ein Stall mehrere neue Standorte in verschiedenen Städten zu haben und ich möchte nur auf eine Stadt auf dem neuesten Standort übereinstimmen. z.B. Ein Stall kann als New York am nächsten kommen, aber dann wird ein neuer Standort für LA hinzugefügt. Jetzt sollte es nur noch in LA für 6 Monate und nicht New York zeigen - zumindest bis ein anderer Ort hinzugefügt wird. Vorherige Standorte müssen gespeichert werden, damit ich sie nicht löschen kann.
Was ist der beste Weg, dies in einer Abfrage zu tun?
Sie sollten die Abfrage anzeigen, die Sie haben. –
Ich habe die Abfrage – Wazzbast
hinzugefügt. Siehe: [Warum sollte ich ein MCVE für eine scheinbar sehr einfache SQL-Abfrage bereitstellen?] (Https://meta.stackoverflow.com/questions/333952/why-should-) i-provide-an-mcve-for-was-scheint-zu-mir-eine-sehr-einfache-sql-Abfrage) – Strawberry