我用PHP创建了一个多答案测试,它将答案发布到MySQL中的表中。没有正确的答案。共有9个问题。问题是名称从a到i的单选按钮,多个答案的值从1到4。这是形式:
避免在公共交通工具上支付车费
1.从不辩解
2.很少有正当理由
3.有时是合理的
4.总是有理有据
如何获取以下两种形式的结果:
- 在所有9个问题中选择了多少个1或2或3或4的值
- 所有选定值的总和
这是表格:
CREATE TABLE `tests`.`integrity`
( `id` INT(11) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(255) NOT NULL ,
`q1` VARCHAR(255) NOT NULL ,
`q2` VARCHAR(255) NOT NULL ,
`q3` VARCHAR(255) NOT NULL ,
`q4` VARCHAR(255) NOT NULL ,
`q5` VARCHAR(255) NOT NULL ,
`q6` VARCHAR(255) NOT NULL ,
`q7` VARCHAR(255) NOT NULL ,
`q8` VARCHAR(255) NOT NULL ,
`q9` VARCHAR(255) NOT NULL ,
PRIMARY KEY (`id`)) ENGINE = MyISAM;
$sql = "INSERT INTO integrity (name, q1, q2, q3, q4, q5, q6, q7, q8, q9)
VALUES ('$value1', '$value2', '$value3', '$value4', '$value5',
'$value6', '$value7', '$value8', '$value9', '$value10')";
结果的例子可能是:你得了9分(如果为所有问题选择的值为1,则从不合理)
最多15个:你是一个非常诚实的人,真的想做正确的事情。15到20你的诚信高于平均水平,但你不介意偶尔违反规则。20至25当规则适合你的时候,你会放松下来,但你并没有从根本上不诚实。25岁以上你不相信遵守规则,发现在适合你的时候很容易打破规则。
Yipes。这里有各种数据完整性问题。varchar(255)
列中有数字值。你已经排除了十个或十个以上问题的小测验。您使用的是MyISAM,它不提供事务完整性。你最好希望你的一个用户没有"johnny droptables"这个名字(查一下)。
但别介意那些东西。我们开发人员抱怨是因为我们的诚信。我们大多数人都应对过太多被黑客入侵的网站,让我们来回答你的问题。
您可以通过这种方式检索每个人的总分。这将按升序显示它们。
SELECT name, q1+q2+q3+q4+q5+q6+q7+q8+q9 score
FROM integrity
ORDER BY q1+q2+q3+q4+q5+q6+q7+q8+q9 ASC, name
你可以像这样创建一个类似直方图的表格。这显示了有多少人得到了每个不同的分数。
SELECT COUNT(*) number_of_people, scores.score
FROM (
SELECT name, q1+q2+q3+q4+q5+q6+q7+q8+q9 score
FROM integrity
ORDER BY q1+q2+q3+q4+q5+q6+q7+q8+q9
) scores
GROUP BY scores.score
ORDER BY COUNT(*) ASC, scores.score
注意。这将忽略以字母开头的值。
我建议你把这件事做好,然后再问一下如何对每个分数进行分类。