Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL-PDO;从有序结果中获取行,以及它的唯一位置_Php_Mysql_Sql_Pdo - Fatal编程技术网

Php MySQL-PDO;从有序结果中获取行,以及它的唯一位置

Php MySQL-PDO;从有序结果中获取行,以及它的唯一位置,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,我最近提出了一个问题,虽然措辞不好,也没有例子,但一位成员建议我重新提出这个问题,因为过去没有答案 我试图以最有效的方式从有序查询中获取行的位置。我计划搜索超过10000个结果,所以我需要尽可能高效 我现在有 SELECT p.*, (SELECT count(DISTINCT prank)+1 FROM uprofile WHERE prank > p.prank ) AS POSITION FROM uprofile p WHERE u

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

我试图以最有效的方式从有序查询中获取行的位置。我计划搜索超过10000个结果,所以我需要尽可能高效

我现在有

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
输出位置应为2;uid是值31,uid值为“31”的文件行是第二大玩家恶作剧

这一切都很好,除了两排有相同的声誉。我的当前数据中,只有3行填充了玩家等级。其余虚拟行的“恶作剧”设置为0,这将导致它们的位置都为4


如何修改SQL以返回唯一的值,而不是某些行具有相同的位置?

mySQL不支持行号,但您可以使用以下方法模拟它:

SET @Position=0;

SELECT p.*, @Position:=@Position+1 POSITION 
FROM uprofile p 
WHERE uid = " . $profile->data()->uid . " 
ORDER BY prank DESC;
似乎您所追求的只是数字1-X,其中X是文件中的最大行数。当恶作剧对用户来说是相同的,只要它们是连续的,那么您似乎不关心用户被分配了什么行号。以上应该可以处理


mysql中变量用法的工作示例见此

,因为顺序似乎是由prank desc定义的,所以只需使用行数排序。。。类似的回答:嘿,谢谢你的回答。我已经试过了,虽然它没有返回任何行。不幸的是,我不确定它有什么不正确的地方。把它分解一下。首先删除where子句,看看是否得到结果。如果您仍然没有在堆栈末尾的响应中查看链接,那么这很有效,我可能键入了一些内容。删除where子句也不会返回任何内容,与使用链接响应相同。