If we check using only one DBDABCDB row, we can use the following example:
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;
However, if we want to take one more step and test each answer to the other answers in the table, we can use the following statement:
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
source share