PHP& MYSQL - 获得行的位置

时间:2013-12-25 08:43:00

标签: php mysql sql

与上一次搜索相比,您可以返回行的位置吗?例如,如果我做了一个简单的查询:select * from table where name='aa'

它将返回

+--+----+---+
|id|name|cid|
+--+----+---+
| 1|  aa|  2|
| 5|  aa|  2|
| 8|  aa|  2|
| 9|  aa|  2|
|10|  aa|  2|
+--+----+---+

如果我将该查询更改为: select * from table where name='aa' and id='5'

它将返回

+--+----+---+
|id|name|cid|
+--+----+---+
| 5|  aa|  2|
+--+----+---+

现在根据where name='aa'的第一次搜索,有5行and id='5'是第二行。

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

2 个答案:

答案 0 :(得分:2)

尽管如此,自然顺序在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

答案 1 :(得分:0)

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

    $rows = $stmt->FetchAll() //Your Fetched Rows
    $cnt = 1;
    foreach ($rows as $row) {
        if ($row['id']==$id) {
            return $cnt
        } else {
            $cnt++
        }
    }

我不确定SQL是否能够像你描述的那样处理更复杂的情况,但是这里的人可能比我更了解这个领域。