Php 计算多个列的更好方法
我目前正在使用以下方法计算多个列,它基本上将answer1、answer2……等列的总数相加到answer30 所以结果看起来像Php 计算多个列的更好方法,php,sql,count,group-by,Php,Sql,Count,Group By,我目前正在使用以下方法计算多个列,它基本上将answer1、answer2……等列的总数相加到answer30 所以结果看起来像 1x 4x 3x 3x 4x 等 有没有更好的方法可以将所有这些代码放到一个查询中 $sql1 = <<<SQL SELECT answer1, COUNT(answer1) FROM `QuestionnaireAnswers` WHERE questionnaireID='$questi
1x
4x
3x
3x
4x
等
有没有更好的方法可以将所有这些代码放到一个查询中
$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 />';
}
$sql2 = <<<SQL
SELECT answer2, COUNT(answer2)
FROM `QuestionnaireAnswers`
WHERE questionnaireID='$questionnaireID'
GROUP BY answer2
SQL;
if(!$result2 = $db->query($sql2)){ die('There was an error running the query [' . $db->error . ']');}
while($row2 = $result2->fetch_assoc()){
echo $row2['COUNT(answer2)'] . ' X <strong>' . $answer2 . '</strong><br />';
}
$sql3 = <<<SQL
SELECT answer3, COUNT(answer3)
FROM `QuestionnaireAnswers`
WHERE questionnaireID='$questionnaireID'
GROUP BY answer3
SQL;
if(!$result3 = $db->query($sql3)){ die('There was an error running the query [' . $db->error . ']');}
while($row3 = $result3->fetch_assoc()){
echo $row3['COUNT(answer3)'] . ' X <strong>' . $answer3 . '</strong><br />';
}
$sql4 = <<<SQL
SELECT answer4, COUNT(answer4)
FROM `QuestionnaireAnswers`
WHERE questionnaireID='$questionnaireID'
GROUP BY answer4
SQL;
if(!$result4 = $db->query($sql4)){ die('There was an error running the query [' . $db->error . ']');}
while($row4 = $result4->fetch_assoc()){
echo $row4['COUNT(answer4)'] . ' X <strong>' . $answer4 . '</strong><br />';
}
$sql5 = <<<SQL
SELECT answer5, COUNT(answer5)
FROM `QuestionnaireAnswers`
WHERE questionnaireID='$questionnaireID'
GROUP BY answer5
SQL;
if(!$result5 = $db->query($sql5)){ die('There was an error running the query [' . $db->error . ']');}
while($row5 = $result5->fetch_assoc()){
echo $row5['COUNT(answer5)'] . ' X <strong>' . $answer5 . '</strong><br />';
}
$sql6 = <<<SQL
SELECT answer6, COUNT(answer6)
FROM `QuestionnaireAnswers`
WHERE questionnaireID='$questionnaireID'
GROUP BY answer6
SQL;
if(!$result6 = $db->query($sql6)){ die('There was an error running the query [' . $db->error . ']');}
while($row6 = $result6->fetch_assoc()){
echo $row6['COUNT(answer6)'] . ' X <strong>' . $answer6 . '</strong><br />';
}
$sql7 = <<<SQL
SELECT answer7, COUNT(answer7)
FROM `QuestionnaireAnswers`
WHERE questionnaireID='$questionnaireID'
GROUP BY answer7
SQL;
if(!$result7 = $db->query($sql7)){ die('There was an error running the query [' . $db->error . ']');}
while($row7 = $result7->fetch_assoc()){
echo $row7['COUNT(answer7)'] . ' X <strong>' . $answer7 . '</strong><br />';
}
$sql8 = <<<SQL
SELECT answer8, COUNT(answer8)
FROM `QuestionnaireAnswers`
WHERE questionnaireID='$questionnaireID'
GROUP BY answer8
SQL;
if(!$result8 = $db->query($sql8)){ die('There was an error running the query [' . $db->error . ']');}
while($row8 = $result8->fetch_assoc()){
echo $row8['COUNT(answer8)'] . ' X <strong>' . $answer8 . '</strong><br />';
}
$sql9 = <<<SQL
SELECT answer9, COUNT(answer9)
FROM `QuestionnaireAnswers`
WHERE questionnaireID='$questionnaireID'
GROUP BY answer9
SQL;
if(!$result9 = $db->query($sql9)){ die('There was an error running the query [' . $db->error . ']');}
while($row9 = $result9->fetch_assoc()){
echo $row9['COUNT(answer9)'] . ' X <strong>' . $answer9 . '</strong><br />';
}
$sql1=fetch_assoc()){
回显$row1['COUNT(answer1')。'X。$answer1.
;
}
$sql2=fetch_assoc()){
回显$row2['COUNT(answer2')。'X。$answer2.
;
}
$sql3=fetch_assoc()){
回显$row3['COUNT(answer3')。'X。$answer3.
;
}
$sql4=fetch_assoc()){
回显$row4['COUNT(answer4)'.'X。$answer4.
;
}
$sql5=fetch_assoc()){
回显$row5['COUNT(answer5)'.'X。$answer5.
;
}
$sql6=fetch_assoc()){
回显$row6['COUNT(answer6)'.'X。$answer6.
;
}
$sql7=fetch_assoc()){
回显$row7['COUNT(answer7)'.'X。$answer7.
;
}
$sql8=fetch_assoc()){
回显$row8['COUNT(answer8')。'X。$answer8.
;
}
$sql9=fetch_assoc()){
回显$row9['COUNT(answer9')。'X。$answer9.
;
}
一种方法:
select answerNum, answerVal, count(answerVal) from
(select n.num answerNum,
case n.num
when 1 then a.answer1
when 2 then a.answer2
...
end answerVal
from (select 1 num union select 2 union ...) n
cross join `QuestionnaireAnswers` a
WHERE questionnaireID='$questionnaireID') sq
group by answerNum, answerVal
把它放在一个查询中。还要重新设计数据库,因为它非常差,这就是为什么需要构造如此奇怪的查询。您应该规范化数据库。结构不良的一个标志是列名称重复:
answer1
,answer2
,…,answer30
。取而代之的是一个带有列的答案表,列有问卷id
,问题编号和答案,并使用连接s。但是如果表单字段是answer1、2等,如何将其存储在DB中的一个字段中,而不让它们混淆?@iainsmpson:答案id有一个字段(1到30),答案值的另一个字段(替换单独的answer1、answer2、…值)——实际上是我的查询所做的(在分组之前)。