Mysql COUNT,不按预期计算

时间:2013-06-20 12:13:10

标签: php mysql sql count while-loop

我使用以下脚本来计算记录,我认为它应该是正常工作的方式。

'某些标题' X4

但它正在输出 '一些标题' 1X 1X 1X 1X

    include("connectmysqli.php"); 
    if (isset($_GET['questionnaireID'])) {$questionnaireID = $_GET['questionnaireID'];}else {$questionnaireID = '';}
    echo '<p><strong>View Questionnaire Results</strong></p>';

    $sql1 = <<<SQL
        SELECT answer1, COUNT(answer1)
        FROM `QuestionnaireAnswers`
        WHERE questionnaireID='$questionnaireID'
        GROUP BY answer1
    SQL;
    if(!$result1 = $db->query($sql1)){ die('There was an error running the query [' . $db->error . ']');}

    while($row1 = $result1->fetch_assoc()){ 

    echo $row1['COUNT(answer1)'] . ' X <strong>' . $answer1 . '</strong><br />';
    }

以下是该表的示例 enter image description here

因此使用上面的屏幕截图,计数时的列answer1应为2x,但实际显示的是1x 1x

如果我从phpmyadmin的答案运行查询,我得到:

enter image description here

2 个答案:

答案 0 :(得分:2)

使用COUNT(*)代替COUNT(answer1),您应该没问题。

这很聪明有两个原因:第一,它可以快得多,其次,你按answer1进行分组,所以你不应该计算它。

编辑这是一个摘要查询。

    SELECT answer1, COUNT(*) AS cnt1
      FROM `QuestionnaireAnswers`
     WHERE questionnaireID='$questionnaireID'
  GROUP BY answer1

它为answer1的每个不同值生成一行,显示该行在原始表中出现的次数。您显示的示例数据仅包含两行。其中一个答案为2,另一个答案为8。

答案 1 :(得分:2)

您正在尝试在PHP中使用MySQL函数(COUNT)。我从未见过这样的用法。 使用别名来计算answer1:

$sql1 = <<<SQL
    SELECT answer1, COUNT(*) as cnt
    FROM `QuestionnaireAnswers`
    WHERE questionnaireID='$questionnaireID'
    GROUP BY questionnaireID
SQL;

然后在fetch_assoc()方法之后将其用作

 echo $row1['cnt'];