【发布时间】:2021-03-23 22:39:39
【问题描述】:
我有一个调查申请,我正在处理结果页面。对于每个问题,页面应显示提供的不同答案以及每个问题提供了多少次。
有些问题可以接受多个答案。例如,假设以下是这样一个问题:
- 感觉怎么样?
- 好
- 不好
- 好的
这意味着Good、Bad 和/或Okay 的任意组合都可以作为答案。
假设调查结果如下:
- 调查 1:
Good、Bad和Okay - 调查 2:
Good、Bad和Okay - 调查 3:
Good和Bad - 调查 4:
Good和Bad - 调查 5:
Good - 调查 6:
Good - 调查 7:
Good
以下是预期的结果:
- 感觉怎么样?
- 好 = 7
- 坏 = 4
- 好的 = 2
我的代码交付
- 感觉怎么样?
- 好 = 3
- 坏 = 2
- 好 = 4
- 好的 = 1
- 坏 = 2
- 好的 = 1
此示例的数据库条目如下所示:
| questionNum | question | answer1 | answer2 | answer3 | ... |
|---|---|---|---|---|---|
| 1 | How are you feeling? | Good | Bad | Okay | |
| 1 | How are you feeling? | Good | Bad | Okay | |
| 1 | How are you feeling? | Good | Bad | ||
| 1 | How are you feeling? | Good | Bad | ||
| 1 | How are you feeling? | Good | |||
| 1 | How are you feeling? | Good | |||
| 1 | How are you feeling? | Good |
这是我的代码:
my $queryQuery = "SELECT questionNum, question, answer1, answer2, answer3, answer4, answer5, answer6, answer7, answer8, answer9, answer10, COUNT(*) FROM results WHERE title = ? GROUP BY answer1, answer2, answer3, answer4, answer5, answer6, answer7, answer8, answer9, answer10 ORDER BY questionNum";
my $sthm = $dbh->prepare($queryQuery);
$sthm->execute($marathon);
my $prev_question;
while(my($questNumber, $quest, $ans1, $ans2, $ans3, $ans4, $ans5, $ans6, $ans7, $ans8, $ans9, $ans10, $count) = $sthm->fetchrow_array){
print qq{<tr><td> $questNumber. $quest \n </td></tr>} unless $quest eq $prev_question; # the trailing conditional is to get rid of the duplicate questions that print out.
print qq{<tr><td> $ans1 = $count </td></tr>} unless $ans1 eq "";
print qq{<tr><td> $ans2 = $count </td></tr>} unless $ans2 eq "";
print qq{<tr><td> $ans3 = $count </td></tr>} unless $ans3 eq "";
print qq{<tr><td> $ans4 = $count </td></tr>} unless $ans4 eq "";
print qq{<tr><td> $ans5 = $count </td></tr>} unless $ans5 eq "";
print qq{<tr><td> $ans6 = $count </td></tr>} unless $ans6 eq "";
print qq{<tr><td> $ans7 = $count </td></tr>} unless $ans7 eq "";
print qq{<tr><td> $ans8 = $count </td></tr>} unless $ans8 eq "";
print qq{<tr><td> $ans9 = $count </td></tr>} unless $ans9 eq "";
print qq{<tr><td> $ans10 = $count </td></tr>} unless $ans10 eq "";
$prev_question = $quest;
}
在这里,我循环查询以打印出所有没有重复的问题,并打印带有问题的答案,只要它们不为空。这是我正在搜索上述输出的地方 1。你感觉如何?好 = 7,坏 = 4,好的 = 2。
相反,我将答案分为几组,因为用户使用复选框而不是单选按钮为单个问题选择了多个答案。因此,在数据库内部,即使答案已被放入它们自己的列中,它们也是相互连接的,因为它们是由用户选择问题选项同时输入的。
【问题讨论】:
-
首先修复您的架构。数据库表不是电子表格。
-
Edit 问题并提供minimal reproducible example,即表格的
CREATE语句(粘贴文本,不要使用图像),@987654342 @ 用于示例数据 (dito) 的语句以及带有表格文本格式的示例数据的所需结果。 -
正如我之前提到的,清楚地描述您的数据。我仍然不知道它是什么,你甚至没有试图描述它
-
@ikegami 我没有证明打印在我身上的代码的格式。这更好吗?我很乐意澄清其他任何事情。
-
@Strawberry 我应该在提交之前仔细查看,我的错误。这个样子怎么样?我很乐意澄清其他任何事情。