我最近创建了一个问题,虽然措辞不好且没有例子,但有成员建议我应该重新提出问题,因为过去没有答案。
我试图以最有效的方式从有序查询中获取行的位置。我计划不得不搜索超过10,000个结果,所以我需要尽可能高效。
我目前有
SELECT p.*,
(SELECT count(DISTINCT prank)+1
FROM uprofile WHERE prank > p.prank
) AS POSITION
FROM uprofile p
WHERE uid = " . $profile->data()->uid . "
ORDER BY prank DESC
哪个输出POSITION为2; uid
是值31,而uprofile的行的uid值为' 31&#39}。有第二多玩家恶作剧(恶作剧)。
这一切都很好,除了两行具有相同的声誉。我目前的数据,只有3行填充了玩家等级。其余的虚拟行的恶作剧设置为0,这使得它们的位置都为4。
如何修改SQL以返回唯一值,而不是某些具有相同位置的行?
答案 0 :(得分:0)
mySQL不支持Row_Number,但您可以使用以下命令来模拟它:
SET @Position=0;
SELECT p.*, @Position:=@Position+1 POSITION
FROM uprofile p
WHERE uid = " . $profile->data()->uid . "
ORDER BY prank DESC;
似乎所有你只是数字1-X,其中X是uprofile中的最大行。看起来你不关心用户被分配的行号,只要它们是连续的,用户的恶作剧是相同的。以上应该处理......
中找到的mysql中变量用法的工作示例