PHP&MYSQL-获取行的位置

PHP&MYSQL-获取行的位置,php,mysql,sql,Php,Mysql,Sql,您能否返回与上一次搜索相比的行位置。例如,如果我做了一个简单的查询:从name='aa'所在的表中选择* 它会回来的 +--+----+---+ |id|name|cid| +--+----+---+ | 1| aa| 2| | 5| aa| 2| | 8| aa| 2| | 9| aa| 2| |10| aa| 2| +--+----+---+ +--+----+---+ |id|name|cid| +--+----+---+ | 5| aa| 2| +--+----

您能否返回与上一次搜索相比的行位置。例如,如果我做了一个简单的查询:从name='aa'所在的表中选择*

它会回来的

+--+----+---+
|id|name|cid|
+--+----+---+
| 1|  aa|  2|
| 5|  aa|  2|
| 8|  aa|  2|
| 9|  aa|  2|
|10|  aa|  2|
+--+----+---+
+--+----+---+
|id|name|cid|
+--+----+---+
| 5|  aa|  2|
+--+----+---+
如果我将该查询更改为: 从name='aa'和id='5'所在的表中选择*

它会回来的

+--+----+---+
|id|name|cid|
+--+----+---+
| 1|  aa|  2|
| 5|  aa|  2|
| 8|  aa|  2|
| 9|  aa|  2|
|10|  aa|  2|
+--+----+---+
+--+----+---+
|id|name|cid|
+--+----+---+
| 5|  aa|  2|
+--+----+---+
现在,根据对where name='aa'的第一次搜索,共有5行,其中id='5'为第二行


那么,有没有一种方法可以得到行相对于初始集的位置?我希望能够打印结果2/5。我可以通过计算总行数得到数字5。我只需要得到和id='5'的位置。我知道这是初始集合的第二行,但我似乎无法找到返回该信息的方法。如果我没有正确解释,请原谅,因为我不太知道如何问这个问题。

您可以使用第一条SQL语句,然后如果您想在该特定名称中搜索5的id,可以使用一个小循环,例如:

    $rows = $stmt->FetchAll() //Your Fetched Rows
    $cnt = 1;
    foreach ($rows as $row) {
        if ($row['id']==$id) {
            return $cnt
        } else {
            $cnt++
        }
    }
我不确定SQL是否能够像您所描述的那样处理更复杂的情况,但这里可能有人在这方面比我有更多的知识。

尽管如此,自然顺序在SQL中没有任何意义-看起来,您指的是按id列排序。那么您的位置就是id小于或等于以下值的行数:

SELECT 
  *, 
  (SELECT COUNT(1) FROM `table` WHERE name='aa' AND id<=5) AS position
FROM 
  `table` 
WHERE 
  name='aa' AND id=5

位置的概念在SQL中几乎毫无意义,SQL是建立在集合论基础上的。无论如何,为什么要这样做呢?请记住,SQL中没有本机顺序。有某个栏目的订单。当我显示集合或分页数据时,您需要决定通常使用哪一列来显示来自mysql的结果。我使用limit并可以很容易地获得行的位置。对于我现在正在开发的应用程序,我只需要获得当前、下一个和上一个结果,这样查询就没有限制,也没有任何基础位置。您指的是DBMS存储数据的某种方式。但让我澄清一下——您的订单是由id列定义的吗?也就是说,第二行集合你的意思是有一行的id小于这个,第二行我的意思是,id=5拉取where name='aa'提供的初始数据集的第二行是的,我想做一些类似的事情,但我觉得mysql中有某种方法可以返回和id='5'的位置,与where name='aa',idk进行比较,我想我可能已经为您找到了一些东西:我不是按ID排序的,但我理解您的示例所做的事情,它正是我所需要的。谢谢这就是我真正需要的:从name='aa'和x所在的表中选择count1