gpt4 book ai didi

php - Mysql查询基于列匹配

转载 作者:行者123 更新时间:2023-11-28 21:27:05 28 4
gpt4 key购买 nike

我不知道如何用 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现场演示。

  1. 创建用户表

    CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL
    );
  2. 创建问题表

    CREATE TABLE questions (
    id INT PRIMARY KEY,
    correct_answer INT NOT NULL
    );
  3. 创建用户答案表

     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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com