我不知道如何用 mysql 做这个,我只知道如何做基本查询,我想显示一个基于匹配的结果列表,结果将根据答案的相同值显示...answers可能有 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
最佳答案
你的表设计的不好,你应该把它分成用户表和问题表。
如果您无法更改表设计,您可以使用以下查询解决问题:
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;
关于php - Mysql查询基于列匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37599574/