从响应条件中获取行号


Get row number from response condition

假设我有以下内容:

$variable = SELECT * FROM `accounts` order by `creation_date`

账户表包含:

| id | username | creation_date | ...

如果$variable输出以下内容:

响应:

| id | username | creation_date|
| 2 | bob      | 1             |
| 4 | jesus    | 2             |
| 8 | vanessa  | 4             |
| 5 | user1    | 43            |

这是一个很好的方法来实际获取在Jesus之前$变量中发生的行数吗?在这种情况下,它将是执行的查询中的第二行。

我确实知道其他方法,比如做foreach和检查每个人的jesus,但我希望有更好的解决方案吗?

我将在每次刷新页面时执行此查询,并查找人员行。所以foreach/while循环会很慢,不是吗?

这有点乱,但这应该可以工作。这使用一个内部MySQL变量向表中的每一行添加一个排名列,然后根据提供的用户名从子查询中选择该列。

Set @rank:=0;
Select rank
  From (
      Select username, @rank:=@rank+1 As rank
        From `accounts`
    Order By creation_date
  ) tbl
 Where username = 'Jesus';

PDO示例:

$db->query('Set @rank:=0;');
$sql = "
  Select rank
    From (
        Select username, @rank:=@rank+1 as rank
          From `accounts`
      Order By creation_date
    ) tbl
 Where username = :username;
";
$stmt = $db->prepare($sql);
$stmt->execute([':username' => 'Jesus']);
$rank = $stmt->fetch()['rank'];

您可以使用计数变量&增量,同时获得每一行,如在while循环中,如下

$cnt=0;
while($obj=mysql_fetch_object($res))
{
$cnt++;
....
}