2012-03-24 10 views
2

Ich habe eine Abfrage, die einige Benutzer zu einem bestimmten Benutzer (Bob) zurückgibt.mysql: Reihenfolge nach nächster ID

Ich muss die nächsten Datensätze abrufen, dh ich muss Benutzer zurückgeben, deren ID-Spalte in der Nähe von Bobs ID ist.

Zum Beispiel:

  ID 

Tom  5 
Mike  8 
Bob  10 
Jack  12 
Brian 13 

Die Abfrage:

SELECT users.* FROM users 
INNER JOIN neighboors on neighboors.neighboor_id = users.id #ignore this join, just to exemplify 
WHERE neighboors.user_id = 10 # bobs id 
ORDER BY something 
LIMIT 3 # i want to return only the 3 nearest users (according to the table above:mike, jack and brian) 

Wie kann ich das erreichen?

aktualisiert

die Logik ist, können die Benutzer Bäume pflanzen, hat jeder Baum specie. Die Abfrage sollte Benutzer zurückgeben, die dieselbe Baumart gepflanzt haben.

Und warum ist wichtige Reihenfolge durch Nähe von ID? Der Klient will diesen Weg :) Es gibt keinen anderen Grund.

+0

ist das reine MySQL? Oder haben Sie eine Anwendungssprache, mit der Sie arbeiten können? –

+0

ich verwende Rubin auf Schienen. während ich nicht eine Weise habe, nur sql zu verwenden, das mit Schienen arbeitet. Ich gebe alle Benutzer-IDs, dann bekomme ich die nahe IDs mit Ruby und zum Schluss, ich frage diese IDs –

Antwort

3

mit diesem Versuchen sollte das tun, was Sie brauchen:

SELECT users.* FROM users 
INNER JOIN neighboors ON neighboors.neighboor_id = users.id 
WHERE neighboors.user_id = 10 
ORDER BY ABS(neighboors.user_id - 10) 
LIMIT 3 

Die ABS Funktion in diesem Fall verwendet wird, durch die die „Abstand“ von user_id gewählten Wert (den Wert gefiltert zu berechnen WOHER ...).

Um eine bessere Leistung bei großen Tabellen zu erhalten, müssen Sie die Spalte (falls noch nicht) indizieren: neighboors.user_id.

+0

hey danke mann, es funktioniert: D –

0

Das Problem ist, dass die Nähe in einer positiven und negativen Richtung funktioniert.

Wenn Sie hatte:

Tom  5 
Mike  8 
Sally 9 
Bob  10 
Sarah 11 
Jack  12 
Brian 13 

Dann tun Sie Mike, Sally und Sarah, oder Sally, Sarah und Jack zurückkehren wollen? Bevorzugen Sie aufsteigende Nähe oder absteigende Nähe?

Es wird helfen, genau zu wissen, welche Geschäftslogik dies zu implementieren versucht. Warum ist es wichtig, durch Nähe der ID zu wählen? Wie bezieht sich die ID auf die Nutzer?

Ich wäre daran interessiert zu helfen, wenn Sie weitere Details zur Verfügung stellen können.

+0

gerade aktualisiert zu erklären, –

+0

über die bevorzugte asc oder desc Nähe, es muss nicht so spezifisch sein. Wenn ich nur die Nähe der Benutzer bekommen könnte, wäre genug :) –

+0

Danke für das Update, Aleroot Lösung scheint der Weg zu sein. Viel Glück! – Alex

Verwandte Themen