我正在寻找一种方法来排序我的
mysqliresult后获取特定项目的位置.我有这样一张桌子:
id_______|_Name_____________|_ParentID 58 | Carl | 15 55 | Clark | 15 12 | David | 4 23 | Sophie | 15 45 | Amanda | 15
我只对ParentID 15的行感兴趣,我想按名称对它们进行排序.然后我想看一个特定的项目,比如id 55(Clark)并知道它放在哪个行号上.我想生成一个这样的表:
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
输出:
id_______|_Name_____________|_ParentID__|_Cnt 58 | Carl | 15 | 2 55 | Clark | 15 | 3 12 | David | 4 | 1 23 | Sophie | 15 | 4 45 | Amanda | 15 | 1
现在Cnt列包含行位置,因此要获得它们的任何一个位置:
SELECT tt.cnt FROM (...above query here...) tt WHERE tt.name = ? --optional AND tt.parent_id = ? --optional