我有以下几行:
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子句之前,有没有什么方法可以在rowset中获取行的位置?
答案 0 :(得分: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
答案 1 :(得分: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
这将解决您的问题......