php - Mysql查询基于列匹配

标签 php mysql testing match rank

我不知道如何用 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/

相关文章:

php - mysql数据库中的保存函数

php - 没有cron的计划PHP脚本执行

php - 如何将 css 与 php 一起使用?

MySQL - 索引 innodb 外键

.net - 在 WCF 服务中测试异常处理

jta - 使用JTA时如何编写自动化集成测试?

PHP 在 Linux 命令提示符下传递 $_GET

MySql 计数总和

java - 类型 "YEAR"的 MySQL 到 Hibernate 数据类型映射

javascript - 如何多次运行相同的测试以测量片状