2016-04-29 25 views
0

のは、私は次があるとしましょう:応答条件から行番号を取得します

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

accountsテーブルが保持している:

| id | username | creation_date | ... 

$variableは以下を出力した場合:

応答:

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

実際には$変数の中に何個の行があるかを知るには良い方法ですか?Jesus?この場合、実行されたクエリでは行番号2になります。

私はforeachのように他の方法を知っており、誰もがjesusをチェックしていますが、これにはより良い解決策があることを願っていますか?

私はすべてのページを更新し、このクエリを実行して、人物の行を探します。だからforeach/whileループは遅いでしょうか?

+0

SELECT *ユーザ名= 'イエスのsplash58 @ – splash58

+0

が、私はspesificクエリからの行を得ることはありません... – maria

+0

私ドン理解していない - 連番で行を取得したいですか? – splash58

答えて

1

それは少し厄介だが、これは動作するはずですが、以下のようにwhileループのように各行を取得しているときは、カウント変数&増分を使用することができます。これは、内部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例:accounts` `FROM

$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 cross join(@rank:= 0を設定)r' - mysqliライブラリで使用する – splash58

0

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

ええ、それは良い解決策ではありませんか? – maria

関連する問題