0

我有以下几行:

id        name        score

1         Bill        0
2         Kim         8
3         Michael     30
4         Doug        22
5         Mellisa     1

当我这样做时SELECT * FROM table ORDER BY score DESC,我得到

id        name        score

4         Doug        22
3         Michael     30
2         Kim         8
5         Mellisa     1
1         Bill        0

现在我只想得到一行,所以我会添加一个 where 子句,但问题是排名。

我在我的 php 代码中生成伪排名,即行集中的第一行被分配排名 1,第二行被分配排名 2,依此类推......

所以当我这样做时SELECT * FROM table WHERE id = 5,显然所有排名信息都丢失了。如何克服这个问题?在添加 where 子句之前,有什么方法可以在行集中获取行的位置?

4

2 回答 2

4

将查询包装在子查询中,以便保留排名。这是一个例子,

-- the example produces rank based on highest score.
SELECT  *
FROM
        (
            SELECT  @rank := ifnull(@rank, 0) + 1 Rank,
                    Id, name, Score
            FROM    tableName a
            ORDER   BY Score DESC
        ) x
WHERE   ID = 5
于 2013-06-03T08:23:16.437 回答
1
SELECT id, name, score, FIND_IN_SET( score, (
SELECT GROUP_CONCAT( score
ORDER BY score DESC ) 
FROM ScoreDetail)
) AS rank
FROM ScoreDetail
Where id=5

这将解决您的问题....

于 2013-06-03T08:31:08.873 回答