根据排名从mysql获取上一行和下一行

时间:2013-02-26 16:00:12

标签: mysql

我使用这个mysql查询逐点获取。我需要按排名获得上一个和下一个项目。

例如:项目的排名是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

2 个答案:

答案 0 :(得分:0)

你从未问过一个问题。

我观察到的一件事是你在subselect中使用了一个不属于subselect的表(uo)。

也许您正在寻找:

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

我很难测试其准确性,不知道你的桌子是什么样的,或者你的问题实际上是什么。

答案 1 :(得分: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