2012-03-24 47 views
2

我有一個查詢返回一些與特定用戶相關的用戶(Bob)。mysql:order by nearest id

我需要檢索最近的記錄,也就是說,我必須返回ID列接近Bob的ID的用戶。

例如:

  ID 

Tom  5 
Mike  8 
Bob  10 
Jack  12 
Brian 13 

查詢:

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) 

我怎麼能做到這一點?

更新

的邏輯是,用戶可以種樹,每棵樹都有一個物種。該查詢應返回已種植相同樹種的用戶。

爲什麼重要的命令靠近id?客戶想要這種方式:)沒有其他原因。

+0

這是純粹的MySQL嗎?或者您是否也有應用程序語言? – 2012-03-24 06:44:56

+0

即時通訊在軌道上使用紅寶石。雖然我沒有辦法只使用sql im與rails一起工作。我返回所有的用戶ID,然後我得到與紅寶石近ids和最後我查詢這個ids – 2012-03-24 07:06:51

回答

3

這種嘗試,應該做你需要的東西:

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 

在這種情況下,ABS功能是用來從user_id選擇值(由濾波值計算「距離」在哪裏...)。

要在大型表上獲得更好的性能,您必須對列(如果尚未)編制索引:neighboors.user_id

+0

嘿感謝的人,它的作品:D – 2012-03-24 07:21:04

0

問題是nearness在正反兩方面都起作用。

如果您有:

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

然後你想回到邁克,薩莉和薩拉,或莎莉,莎拉和傑克?你喜歡上升接近還是下降接近?

這將有助於確切知道它試圖實現的業務邏輯。爲什麼選擇靠近ID是很重要的?身份證是如何與用戶相互關聯的?

如果您可以提供更多詳細信息,我會對幫助感興趣。

+0

剛剛更新解釋 – 2012-03-24 07:01:51

+0

有關喜歡asc或desc鄰近,它並不需要是特定的。如果我能夠接近用戶就足夠了:) – 2012-03-24 07:04:26

+0

感謝您的更新,aleroot的解決方案看起來是一種方式。祝你好運! – Alex 2012-03-24 07:16:22