Ich versuche, *
aus der users2
Tabelle zu erhalten, wo der Standort des Benutzers innerhalb des angegebenen Radius ist.Verknüpfen Sie zwei Tabellen Unterabfrage
Die Standortabfrage funktioniert problemlos in der Tabelle user_location2
.
SELECT uid, (3959 * acos(cos(radians(28.247800068217)) * cos(radians(`lat`)) * cos(radians(`lon`) - radians(-80.726205977101))
+ sin(radians(28.247800068217)) * sin(radians(`lat`))))
AS distance FROM user_location2
HAVING distance <= 25 ORDER BY time_stamp
und die innere Verknüpfung funktioniert gut ohne die Standortunterabfrage
SELECT *
FROM users2
LEFT JOIN user_location2
ON user_location2.uid = users2.id
Ich bin nur Probleme, die Kombination der beiden. Hier ist meine aktuelle Abfrage, die nur alle Zeilen zurückgibt, also mache ich offensichtlich etwas falsch.
SELECT *
FROM users2
LEFT JOIN user_location2
ON user_location2.uid = users2.id
WHERE EXISTS (SELECT NULL, (3959 * acos(cos(radians(26.247800068217)) * cos(radians(`lat`)) * cos(radians(`lon`) - radians(-89.726205977101)) + sin(radians(26.247800068217)) * sin(radians(`lat`))))
AS distance FROM user_location2
HAVING distance <= 5 ORDER BY time_stamp)
bearbeiten enthielt
Ich hoffe, in einer dritten Tabelle hinzuzufügen (user_like) eine Menge von möglichen Zeilen zu beseitigen, die im Ergebnis nicht enthalten sein sollten.
Lassen Sie sich sagen, dass das Skript für user_id läuft = 88
Also im Grunde 89 Benutzer, 90 und 91 unter dem Ortsradius fallen würden, würde aber im Ergebnis nicht enthalten sein, da 88 Benutzer hat sie schon gemocht.
, die groß ist! Scheint gut zu funktionieren. Ist es möglich, ein paar WHERE-Klauseln von users2 darauf zu werfen? wie WHERE users2.age> 25 –
Ja. Fügen Sie sie einfach vor oder nach der Bedingung hinzu und verwenden Sie AND oder OR nach Bedarf. – clinomaniac
Können Sie meine bearbeitete Frage überprüfen, wenn Sie eine Chance haben? Ich würde es wirklich schätzen. –