与上一次搜索相比,您可以返回行的位置吗?例如,如果我做了一个简单的查询: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'
的位置。我知道的是初始集的第二行,但我似乎无法找到返回该信息的方法。请原谅我,如果我没有正确解释这个问题,因为我不太清楚如何提出这个问题。
答案 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是否能够像你描述的那样处理更复杂的情况,但是这里的人可能比我更了解这个领域。