2016-04-29 71 views
0

比方说,我有以下几点:从响应状态获取行号

$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之前,真正获得$ variable中发生的行数是一个好方法吗?在这种情况下,执行查询时将是第二行。

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

我打算在每个页面上刷新,执行此查询并查找人员行。所以foreach/while循环会不会很慢?

+0

SELECT * FROM'accounts'其中username = '耶稣' – splash58

+0

@ splash58但我不从spesific查询得到它的行... – maria

+0

我不不明白 - 你想按序列号排列吗? – splash58

回答

1

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

Set @rank:=0; 
Select rank 
    From (
     Select username, @rank:[email protected]+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:[email protected]+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

'tbl交叉连接(Set @rank:= 0)r' - 与mysqli库一起使用 – splash58

0

您可以使用一个计数变量&增加而越来越像每一行中while循环如下

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

是的,但它不是一个更好的解决方案? – maria