Hey gibt es eine Möglichkeit, eine Liste der nächsten 10 Ziele in der Reihenfolge ihrer Entfernung zu erhalten, hat meine MySQL-Datenbank die Breite und Länge des Benutzers und der Orte. Ich möchte nicht den Abstand zwischen dem Benutzer und dem Ort aka no max oder min Abstand angeben, nur die nächsten 10, die ich brauche. Beide Benutzer und Orte teilen sich die gleiche Tabelle.nächste 10 Ziele in der Reihenfolge ihrer Entfernung
Antwort
können Sie die Haversine Formel:
SELECT t.*, (6371 * ACOS(COS(RADIANS(lat_user)) * COS(RADIANS(lat)) *
COS(RADIANS(lng) - RADIANS(lng_user)) + SIN(RADIANS(lat_user)) *
SIN(RADIANS(lat)))) AS distance -- distance in kilometers
FROM yourTable
ORDER BY distance ASC
LIMIT 10
In der obigen Abfrage Ich gehe davon aus, dass lat_user
und lng_user
die Breite und Länge des Benutzers sind. Und lat
und lng
sind die Breite und Länge eines bestimmten Ortes (Datensatz).
Lesen Sie this SO question für weitere Informationen.
Außer, dass dies durch jeden einzelnen gehen wird Eintrag in die Datenbanktabelle .... der es sehr, sehr langsam machen wird ... Haversine ist eine teure, langsame Formel, um –
zu berechnen Ich bin nicht am Lat vorbei und lange am Ort, ich muss Orte aus der Datenbank holen –
@MarkBaker Ja, dies wird für eine große Datenbank mit häufigen oder vielen Benutzern nicht gut skalieren. Aber für ein paar hundert oder tausend Datensätze sollte es machbar sein. Eine Art von geographischer Aufteilung ist ein besserer Weg, um langfristig zu gehen. –
- 1. Moq Ziele anrufen, um sicherzustellen, werden in der richtigen Reihenfolge
- 2. Spaltennamen in ihrer ursprünglichen Reihenfolge anzeigen?
- 3. Beweise über Funktionen, die von der Reihenfolge ihrer Alternativen abhängen
- 4. Behalten Select-Keys die Reihenfolge ihrer Keyseq?
- 5. Runde Dezimalstelle auf die nächste 10.
- 6. Javascript mit Runde auf die nächste 10
- 7. Nächste N nächste Geo-Punkte
- 8. Reihenfolge der Wachstumsrate in aufsteigender Reihenfolge
- 9. wie kann nächste Taste, um den 10 divs in html
- 10. Entfernung von der gültigen Nummer
- 11. Bietet BlockingCollection <T> Garantie Entfernung Reihenfolge?
- 12. Unable Entfernung in Zsh
- 13. Reihenfolge der Multiplikation und Division
- 14. Memo-Ziele in Prolog
- 15. Wie kann ich Hashwerte in einem Array in ihrer Reihenfolge extrahieren?
- 16. Realtime-Entfernung von Wagenrücklauf in der Shell
- 17. Angeben der Ausführung der Task-Reihenfolge in Java
- 18. Wie kann ich Aufgaben in der Reihenfolge ihrer zugehörigen User Stories im Backlog abfragen?
- 19. Wie man die Reihenfolge der Dropdown-Listeneinträge entsprechend ihrer ID-Nummern in den GeoJSON-Eigenschaften einstellt
- 20. Sortieren Sie eine Liste, geben Sie dann die Indizes der Elemente in ihrer ursprünglichen Reihenfolge
- 21. Wie durchlaufen Sie alle Untersammlungen der Größe K in aufsteigender Reihenfolge ihrer Summen.
- 22. Reihenfolge der Dezimalstellen in Excel
- 23. Ändern Reihenfolge der Reihenfolge Wörterbuch in Python
- 24. Tatsächliche Leistungsvorteile der Entfernung im Quadrat im Vergleich zur Entfernung
- 25. Reihenfolge Faktor Ebenen in der Reihenfolge des Auftretens in Datensatz
- 26. Google Entfernung API mir unterschiedliche Ergebnisse geben, wenn anders für die gleiche Quelle und Ziele genannt
- 27. Reihenfolge der Threads in der Reihenfolge, in der sie erstellt/gestartet wurden
- 28. Auswertung der Reihenfolge der Funktionsargumente und Standardargumente
- 29. Reihenfolge der Bytes in Struct
- 30. Berechnung der Rundreise Entfernung in Python
Ja - es ist möglich – RamRaider
Es gibt, aber es ist langsam .... und Sie können es effizienter machen, indem Sie eine Bounding Box angeben und eine Reihe von Abfragen mit immer größer werdenden Begrenzungsrahmen ausführen, bis Sie Ihre 10 haben Einträge –
Ich schrieb 10 zum Beispiel, eigentlich brauche ich mindestens 100, so ist es eine nicht eine gute Idee, die ich denke :( –