假设我有以下内容:
$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++;
....
}