我不知道怎么用mysql做这个,我只知道如何做基本查询,我想根据匹配显示结果列表,结果将根据答案的相同值显示...答案可能具有1-10的值
+++++++++++++++TABLE++++++++++++
id | userName | answer1 | answer2 | answer3 | answer4….
10 Jhon 1 1 3 8
11 Anne 1 2 4 8
12 Mike 7 4 5 7
etc…
++++++++++++++++++++++++++++++++++++++++
如果我在查询中发送值,我想检查答案并显示结果排序我的匹配, 更多匹配首先...没有匹配最后
所以,如果我发送结果:
answer1=1 answer2=1 answer3=7 answer4=2...
结果应该是(给回id)
10 11 12
答案 0 :(得分:1)
您的桌面设计不合适,您应该将其分为用户和问题表。
如果您无法更改表格设计,可以使用此查询解决问题:
select
id,
username,
if(answer1 = :an1, 1, 0) + if(answer2 = :an2, 1, 0) + if(answer3 = :an3, 1, 0) + if(answer4 = :an4, 1, 0) as total
from
table
order by total desc
<强>更新强> 更好地解决这个问题:
使用实时演示检查SQLFiddle:http://sqlfiddle.com/#!9/6c145/2。
创建用户表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL
);
创建问题表
CREATE TABLE questions (
id INT PRIMARY KEY,
correct_answer INT NOT NULL
);
创建用户答案表
CREATE TABLE user_answers (
user_id INT,
question_id INT,
user_answer TINYINT,
PRIMARY KEY (user_id, question_id),
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY (question_id) REFERENCES questions (id) ON DELETE NO ACTION ON UPDATE NO ACTION
);
要检索数据,您可以使用查询:
SELECT
tmp.id,
tmp.username,
sum(tmp.is_correct) as total
FROM (
SELECT
users.id,
users.username,
IF (questions.correct_answer = user_answers.user_answer, 1, 0) as is_correct
FROM
users
INNER JOIN user_answers on users.id = user_answers.user_id
INNER JOIN questions on user_answers.question_id = questions.id
) tmp
GROUP BY tmp.id, tmp.username
ORDER BY total desc;