Php 在对mysqli结果排序后获取行的位置

Php 在对mysqli结果排序后获取行的位置,php,mysql,sql,Php,Mysql,Sql,我正在寻找一种方法,在对mysqliresult进行排序后,获取特定项目的位置。我有一张这样的桌子: id_______|_Name_____________|_ParentID 58 | Carl | 15 55 | Clark | 15 12 | David | 4 23 | Sophie | 15 45 | Amanda |

我正在寻找一种方法,在对mysqliresult进行排序后,获取特定项目的位置。我有一张这样的桌子:

id_______|_Name_____________|_ParentID
58       | Carl             | 15
55       | Clark            | 15
12       | David            | 4
23       | Sophie           | 15
45       | Amanda           | 15
id_______|_Name_____________|_ParentID
45       | Amanda           | 15
58       | Carl             | 15
55       | Clark            | 15
23       | Sophie           | 15
我只对ParentID为15的行感兴趣,我想按它们的名称对它们进行排序。然后我想看一个特定的项目,比如ID55(Clark),并知道它放在哪个行号上。我想生成如下表:

id_______|_Name_____________|_ParentID
58       | Carl             | 15
55       | Clark            | 15
12       | David            | 4
23       | Sophie           | 15
45       | Amanda           | 15
id_______|_Name_____________|_ParentID
45       | Amanda           | 15
58       | Carl             | 15
55       | Clark            | 15
23       | Sophie           | 15
当我对Clark感兴趣时,我想得到数字3,因为他的行是这个新表中的第三行

这可能与mysqli有关吗?如果不能在一条语句中完成,我必须循环所有选定的项目,并使每个项目的计数都增加,直到找到正确的项目为止,但我确实希望避免这种情况,因为要循环的项目数会快速增加。

尝试以下方法:

SELECT t.*,
       (SELECT COUNT(*) FROM YourTable s
        WHERE t.parent_id = s.parent_id 
           and t.name <= s.name) as Cnt
FROM YourTable t
现在,
Cnt
列包含行位置,因此要获取其任意一个位置:

SELECT tt.cnt 
FROM (...above query here...) tt
WHERE tt.name = ? --optional
  AND tt.parent_id = ? --optional
试一试


您可以通过执行以下操作获取
Clark
的行:

select count(*)
from t
where t.ParentId = 15 and
      t.Name <= 'Clark';
选择计数(*)
从t
其中t.ParentId=15,且
t、 您可以使用中的名称


您只需要找到“Clark”位置,或者还需要parentID=15和名称排序顺序查询?用户只需要parentID 15记录作为输出。和?我给了他一个动态的答案来处理每一个parentID,这似乎是一个奇怪的请求,仅仅查询一个parentID@RuchishParikhChecked。工作罚款。:)问题-我能使用这个专栏多久?它会毁灭吗@你什么意思?只要你保留它,你就可以使用它,你可以将它存储在一张桌子上,你将永远拥有它。不,他说他想得到这样一张桌子,然后他可以从结果集中得到他喜欢的任何一张,因为结果是排序的。你说的@sagi是什么意思?我的意思是如果你想同时得到
Clark
Carl
的位置,你必须执行两次这个查询。@sagi。这个问题只提到了“克拉克”
。没有。。他举了一个例子,他只提到了parentid 15。
SELECT T.*,  if(@a, @a:=@a+1, @a:=1) as rownum 
FROM T
WHERE ParentID=15
ORDER BY Name