我们说我有以下内容:
$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循环会慢得多吗?
答案 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++;
....
}