2013-02-26 45 views
-2

我使用這個mysql查詢來逐級獲得。我需要按排名獲得上一個和下一個項目。根據等級從mysql獲取上一行和下一行

例如:item的等級是99.在項目頁面,我想顯示第100,101,98和97個項目。

http://erincfirtina.com/apps/urdemo/track.php?tid=10

我需要做的相關曲目列表

這裏是我的MySQL查詢其取得名次:

SELECT 
uo.*, 
(SELECT COUNT(*) FROM tracks ui WHERE (ui.point, ui.id) >= (uo.point, uo.id)) AS rank 
FROM tracks uo WHERE id = 10 
+0

當你指的是100級,意思排名從'(SELECT COUNT(*)FROM未來軌道UI WHERE(ui.point,ui.id)> =(uo.point,uo.id) )AS等級?我們最好看看錶格的結構來澄清 – fedorqui 2013-02-26 16:02:54

+0

進一步從@ fedorqui的評論,你應該把一個[小提琴](http://www.sqlfiddle.com)與你的一些數據 – hd1 2013-02-26 16:05:05

+0

這裏是fiddleup鏈接: http://www.sqlfiddle.com/#!2/86f3b/1 – 2013-02-26 16:25:30

回答

0

你從來沒有問過的問題。

我正在觀察的一件事是,您在子查詢中使用的表(uo)不是子查詢的一部分。

也許你正在尋找:

SELECT uo.*, COUNT(*) AS rank 
FROM tracks ui, tracks uo 
WHERE (ui.point, ui.id) >= (uo.point, uo.id) 
    AND uo.id = 10; 

我很難與不知道你的表看起來像什麼,或者你的問題其實是檢驗其準確性。

+0

此查詢不起作用,因爲您正在將聚合(COUNT(*)')與未聚合的字段混合使用。 – 2013-02-26 16:10:47

+0

是的,它需要一個GROUP BY,但如果沒有更多的OP數據,我無法知道要分組的內容。 – thelr 2013-02-26 16:15:39

0

該查詢應該可以工作,但它會非常糟糕。

SELECT * 
FROM (
    SELECT 
    uo.*, 
    (SELECT COUNT(*) FROM tracks ui WHERE (ui.point, ui.id) >= (uo.point, uo.id)) AS rank 
    FROM tracks uo WHERE id = 10 
) t 
ORDER BY t.rank DESC