2016-04-26 8 views
0

私はサブクエリを持っており、MySQLのPHPで行を数えたいと思います。私は古いコードを修正しようとしており、PDOがより良く安全であることを知り、最終的にはこのコードをすべて書き直す予定ですが、今のところ私はそれを機能させる必要があります。私の問題は、$ total_employeesが行を数えるためのコマンドを計算することです。この数値は後で式で使用されます。 2つのサブクエリとして、またはphpとmysql_fetch_rowを使用する以外のSQL文で書き直す方法はありますか?私は複数のwhileループを避けようとしています。これは、見やすくするために、より大きなクエリから凝縮されています。すでにcount(*)を使用しているクエリでPHPの行をカウントしていますか?

while($rows=mysql_fetch_array($sqls)){ 
    $cycle_id = $rows[cycle_id]; 

    $sqls=("select subb.sqlcal AS sqlcalemp from 
    (select count(*) as sqlcal from dialogue_employees d_e, 
    dialogue_leaders d_l where 
    d_l.leader_group_id = d_e.leader_group_id and 
    d_l.cycle_id = $cycle_id) as subb"); 

    $total_employees += $rows[sqlcalsemp]; 

これはそれを更新しようとする前に働いていた古いコードだった: は多分それぞれのすべてのカウントをつかむために、このような何かをしようと...

while($rows=mysql_fetch_array($sqls)){ 
    $cycle_id = $rows[cycle_id]; 
$sqlcalcemp=mysql_query("select count(*) from dialogue_employees d_e, 
dialogue_leaders d_l where 
d_l.leader_group_id = d_e.leader_group_id and 
d_l.cycle_id = $cycle_id") or die(mysql_error()); 

$rowtotal = mysql_fetch_row($sqlcalcemp); 
$total_employees += $rowtotal[0]; 
+0

単一のカウントを返します。外側のクエリは、必要のないこのカウントを選択します。だから、1行しか返さないようにしてください。 –

+0

私たちは 'cycle_id'を得るための他のクエリを表示します、そして/またはそれらを数え、' cycle_id'でグループ化し、結果を1つのクエリで与えることができます。複数のクエリとループを実行する必要があります。 –

+0

と可能であれば、テスト目的のためにいくつかのデータにsqlfiddle.comを提供してください。 –

答えて

0

あなたのをループし、各cycle_idを見てcycle_id一度あなたがサブクエリ

select SUM(d_e.leader_group_id IS NOT NULL) as sqlcalemp,d_l.cycle_id 
from dialogue_leaders d_l 
left join dialogue_employees d_e 
on d_l.leader_group_id = d_e.leader_group_id 
group by d_l.cycle_id 

http://sqlfiddle.com/#!9/4995b/4

関連する問題