0

特定のアンケート ID に一致する ID 列のエントリをカウントする PHP スクリプトに少し問題があります。結果は非常に反社会的で、何らかの理由でグループ化したくない....

        $sql30 = <<<SQL
    SELECT id, COUNT(id) 
    FROM `QuestionnaireAnswers`
    WHERE questionnaireID='$questionnaireID'
    GROUP BY id
    SQL;
    if(!$result30 = $db->query($sql30)){ die('There was an error running the query [' . $db->error . ']');}
    while($row30 = $result30->fetch_assoc()){
        if ($row30['COUNT(id)'] == '' OR $row30['COUNT(id)'] == '0'){$numberofresponses = '0';}
        else {$numberofresponses = $row30['COUNT(id)'];}    
    echo '<td>'.$numberofresponses.'</td>';
    }

サンプルの QuestionnaireID 1327809154 を使用し、phpmyadmin で次のクエリを実行するとします。

SELECT id, COUNT( id ) 
FROM  `QuestionnaireAnswers` 
WHERE questionnaireID =  '1327809154'
GROUP BY id
LIMIT 0 , 30

次の結果が得られます。

id  COUNT(id)
129 1
130 1
131 1
132 1
133 1
134 1
277 1
278 1
280 1
281 1
282 1
284 1
290 1
419 1
424 1
425 1
426 1

そう.....結果を数えているように見えますが、それらをグループ化して合計を出すことはできません........

編集、私は今それを次のように変更しました:

        $sql30 = <<<SQL
    SELECT questionnaireID, COUNT(questionnaireID) 
    FROM `QuestionnaireAnswers`
    WHERE questionnaireID='$questionnaireID'
    GROUP BY questionnaireID
    SQL;
    if(!$result30 = $db->query($sql30)){ die('There was an error running the query [' . $db->error . ']');}
    while($row30 = $result30->fetch_assoc()){
        if ($row30['COUNT(questionnaireID)'] == '' OR $row30['COUNT(questionnaireID)'] == '0'){$numberofresponses = '0';}
        else {$numberofresponses = $row30['COUNT(questionnaireID)'];}   
    echo '<td>'.$numberofresponses.'</td>';
    }

これは以下を返します:

questionnaireID COUNT(questionnaireID)
 1327809154 17

これは phpmyadmin で機能しますが、なんらかの理由でスクリプトに何も返されません。カウントがあるはずのテーブル列が空白です。

4

4 に答える 4

2

クエリは単にすべての ID を取得するだけであり、それぞれが一意であるため、応答の数を取得する代わりに、それぞれのカウントを 1 として表示します。

SELECT COUNT(id) FROM `QuestionnaireAnswers` 
WHERE questionnaireID =  '1327809154'
于 2013-07-04T08:30:07.457 に答える
1

ID はすべて一意であるため、グループ化することはできません。等しい値のみがグループ化され、それらのカウントが合計されます。

于 2013-07-04T08:25:40.187 に答える
0

編集後に機能しなかった理由は、while ループでアンケート ID を定義しなかったためです。$questionnaireID = $row['questionnaireID'];

于 2013-07-04T08:39:22.330 に答える
0

これは、異なる非 NULL 値の数を返します。

SELECT COUNT(DISTINCT `id`) 
FROM  `QuestionnaireAnswers` 
WHERE questionnaireID =  '1327809154'

GROUP BYは 1 つしかないため、必要ありませんquestionnaireID

于 2013-07-04T08:40:13.473 に答える