MySQL PDO;从有序结果中获取行,它是唯一的位置

时间:2014-09-29 18:45:12

标签: php mysql sql pdo

我最近创建了一个问题,虽然措辞不好且没有例子,但有成员建议我应该重新提出问题,因为过去没有答案。

我试图以最有效的方式从有序查询中获取行的位置。我计划不得不搜索超过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以返回唯一值,而不是某些具有相同位置的行?

1 个答案:

答案 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中的最大行。看起来你不关心用户被分配的行号,只要它们是连续的,用户的恶作剧是相同的。以上应该处理......

Stack response

中找到的mysql中变量用法的工作示例