php - mysqli结果排序后获取一行的位置

标签 php mysql sql

我正在寻找一种方法来在对我的 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

关于php - mysqli结果排序后获取一行的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36596792/

相关文章:

PHP JWT 签名无效

php - Laravel 将变量传递给 whereha 查询

php - 如何将选项字段中的两个值发布到表中的一列中

mysql - 如何在 VB.net 中为 SQL 编码字符串

php - 当 id 与输入框名称扩展 id 匹配时,如何将动态输入框值插入单列表中

php mysql 根据表单中的变量进行更新

php - 如何将数组插入MYSQL数据库?

php - Internet Explorer 缓存问题

sql - PostgreSQL - 从返回的 'days' 值中减去 'date' 而不返回时间戳

php - MySQL JOINS 用例