从响应条件中获取行号

时间:2016-04-29 10:07:42

标签: php

我们说我有以下内容:

$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循环会慢得多吗?

2 个答案:

答案 0 :(得分:1)

这有点乱,但这应该有效。这使用内部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'];

答案 1 :(得分:0)

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

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