比较行和列的mySQL查询

比较行和列的mySQL查询,mysql,Mysql,我有一个包含8个问题的测验的用户答案数据库。Q1-Q8都是他们自己的列,我想比较所有的行,并为每个回答了至少5个相同问题的人返回一个数字 所以这里,第5行和第6行将计为2。基本上,我想给每个回答至少5个相同问题的人一个电话号码。对于mySQL查询,这可能吗 编辑: 在这里,用户输入D B D A C D B,与2个回答类似的测验相匹配。这里的查询将返回计数2 因为MySQL中FALSE为0,TRUE为1: SELECT COUNT(*) FROM quiz WHERE ( (q1=@q1) +

我有一个包含8个问题的测验的用户答案数据库。Q1-Q8都是他们自己的列,我想比较所有的行,并为每个回答了至少5个相同问题的人返回一个数字

所以这里,第5行和第6行将计为2。基本上,我想给每个回答至少5个相同问题的人一个电话号码。对于mySQL查询,这可能吗

编辑:

在这里,用户输入D B D A C D B,与2个回答类似的测验相匹配。这里的查询将返回计数2

因为MySQL中FALSE为0,TRUE为1:

SELECT COUNT(*)
FROM quiz
WHERE ( (q1=@q1) + (q2=@q2) + (q3=@q3) + (q4=@q4)
      + (q5=@q5) + (q6=@q6) + (q7=@q7) + (q8=@q8) 
      ) >= 5

如果我们仅使用您的一行D B D A B C D B进行测试,我们可以使用以下示例:

SELECT * FROM `answers` WHERE  ((CASE WHEN q1 = 'D' THEN 1 ELSE 0 END) +     
(CASE WHEN q2 = 'B' THEN 1 ELSE 0 END) +     
(CASE WHEN q3 = 'D' THEN 1 ELSE 0 END) +         
(CASE WHEN q4 = 'A' THEN 1 ELSE 0 END) +     
(CASE WHEN q5 = 'B' THEN 1 ELSE 0 END) +     
(CASE WHEN q6 = 'C' THEN 1 ELSE 0 END) +     
(CASE WHEN q7 = 'D' THEN 1 ELSE 0 END) +         
(CASE WHEN q8 = 'B' THEN 1 ELSE 0 END)) >= 5;        
然而,如果我们想更进一步,对照表中的其他答案测试每个答案,我们可以使用以下语句:

SELECT *, (SELECT COUNT(answer_sub.idanswers) FROM `answers` answer_sub     
WHERE ((CASE WHEN answer_sub.q1 = a.q1 THEN 1 ELSE 0 END) +     
(CASE WHEN answer_sub.q2 = a.q2 THEN 1 ELSE 0 END) +     
(CASE WHEN answer_sub.q3 = a.q3 THEN 1 ELSE 0 END) +     
(CASE WHEN answer_sub.q4 = a.q4 THEN 1 ELSE 0 END) +     
(CASE WHEN answer_sub.q5 = a.q5 THEN 1 ELSE 0 END) +     
(CASE WHEN answer_sub.q6 = a.q6 THEN 1 ELSE 0 END) +     
(CASE WHEN answer_sub.q7 = a.q7 THEN 1 ELSE 0 END) +     
(CASE WHEN answer_sub.q8 = a.q8 THEN 1 ELSE 0 END)) >= 5     
AND answer_sub.idanswers <> a.idanswers) as matching    
FROM `answers` a    
WHERE (SELECT COUNT(answer_sub.idanswers) FROM `answers` answer_sub     
WHERE ((CASE WHEN answer_sub.q1 = a.q1 THEN 1 ELSE 0 END) +     
(CASE WHEN answer_sub.q2 = a.q2 THEN 1 ELSE 0 END) +     
(CASE WHEN answer_sub.q3 = a.q3 THEN 1 ELSE 0 END) +     
(CASE WHEN answer_sub.q4 = a.q4 THEN 1 ELSE 0 END) +     
(CASE WHEN answer_sub.q5 = a.q5 THEN 1 ELSE 0 END) +     
(CASE WHEN answer_sub.q6 = a.q6 THEN 1 ELSE 0 END) +     
(CASE WHEN answer_sub.q7 = a.q7 THEN 1 ELSE 0 END) +     
(CASE WHEN answer_sub.q8 = a.q8 THEN 1 ELSE 0 END)) >= 5     
AND answer_sub.idanswers <> a.idanswers) > 0    

5个与什么基准相同的问题?是的,这是一个基于每个用户的基础上,我假设基准将意味着什么用户的答案是什么。因此,如果我回答B A C A,这将返回A 2,因为数据库中已经有两行有5个答案相似。我不知道你想得到什么结果,因为你的两个解释是相同的,与你的数据没有关系。请您编辑您的问题,并演示如何计算您在上次评论中描述的结果,好吗?我看不出第3行会有什么结果。在你编辑的帖子中——如果你回答Baaaaaaaa,它会不会返回2,因为第5行和第6行都与你有至少5个相同的答案?新图片希望能进一步澄清这个问题。但是它会返回2,行只需要5个与当前用户的答案相同的答案就可以算作匹配。