我在PHP中创建了一个多答案测验,用于将答案发布到MySQL中。没有正确的答案。有9个问题。问题是名称从a到i的单选按钮,多个答案的值为1到4.这是以下形式:
避免在公共交通工具上支付车费。
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加上你不相信按照规则生活,并且在适合你时很容易打破它们。
答案 0 :(得分:1)
商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
请注意。这将默默地忽略以字母开头的值。
我建议你让这个工作,然后再问一下每个分数的分类。