按ID分组不在php中分组

时间:2013-07-04 08:23:46

标签: php mysql count group-by

我的php脚本有点问题,它会计算与某个问卷调查ID匹配的id列条目。结果似乎是非常反社会的,只是因为某种原因不想组合......

        $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>';
    }

如果我使用示例问卷ID 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 个答案:

答案 0 :(得分:2)

您的查询只是获取所有ID,因为每个ID都是唯一的,它会为每个ID显示计数为1,而不是计算刚刚使用的响应数

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

答案 1 :(得分:1)

您的ID都是唯一的,因此无法对其进行分组。只有相等的值组合在一起并计算其计数。

答案 2 :(得分:0)

好的,我现在对它进行了排序,之所以在编辑之后没有工作,是因为我没有在while循环中定义questionnaireID。 $ questionnaireID = $ row ['questionnaireID'];

答案 3 :(得分:0)

这将返回不同的非NULL值的数量。

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

您不需要GROUP BY,因为您只有一个questionnaireID