2016-12-22 3 views
0
$stmt = $con->prepare("SELECT t.name, COUNT(*) 
         FROM team t 
         JOIN member m ON FIND_IN_SET(m.team_id, t.id) >0 
         GROUP BY t.name 
         LIMIT 0 , 30"); 
$stmt->execute(); 
$stmt->setFetchMode(PDO::FETCH_BOUND); 
$stmt->bindColumn('count', $count); 
$stmt->bindColumn('name', $name); 
while ($row = $stmt->fetch()) 
{ 
    echo "<tr><td>".$name."</td>";     
    echo "<td>".$count."</td>"; 
} 

上記のコードでは、2列の名前とcount(*)を取得しています。問題は、カウント列にアクセスすることです。私は以下のエラーを受け取ります。PDOクエリでカウント(*)列を参照する方法

Warning: PDOStatement::bindColumn(): SQLSTATE[HY000]: General error: Did not find column name 'count' in the defined columns; it will not be bound in

どのように合計カウントにバインドできますか?

+2

私はエイリアシングがうまくいくと思っていますが、私は前に 'bindcolumn'を使っていません。 '名前として名前を選択し、カウントとしてカウント(*)。 – chris85

+0

エイリアシングは間違いなく道のりですが、 'var_dump($ row);'でキーが何であるかを見ることもできます。 – Sammitch

答えて

4

別名:COUNT(*) as countを使用してください。

$stmt = $con->prepare("SELECT t.name, COUNT(*) as count 
         FROM team t 
         JOIN member m ON FIND_IN_SET(m.team_id, t.id) >0 
         GROUP BY t.name 
         LIMIT 0 , 30"); 

$stmt->execute(); 
$stmt->setFetchMode(PDO::FETCH_BOUND); 
$stmt->bindColumn('count', $count); 
$stmt->bindColumn('name', $name); 

while ($row = $stmt->fetch()) 
{ 
    echo "<tr><td>".$name."</td>";     
    echo "<td>".$count."</td>"; 
} 
+0

はうまくいった、ありがとう – user580950

+0

@ user580950助けてくれてうれしい!答えを受け入れることを忘れないでください。ところで、将来は、使用しているデータベース(MySQLなど)に必ずタグを付けてください。 –

+0

SFが回答を受け入れるまで10分間待つと私は – user580950

1

列名にエイリアスを使用する代わりに、1から始まる列番号を指定できます。

$stmt = $con->prepare("SELECT t.name, COUNT(*) 
         FROM team t 
         JOIN member m ON FIND_IN_SET(m.team_id, t.id) >0 
         GROUP BY t.name 
         LIMIT 0 , 30"); 
$stmt->execute(); 
$stmt->setFetchMode(PDO::FETCH_BOUND); 
$stmt->bindColumn(2, $count); 
$stmt->bindColumn(1, $name); 
関連する問題