我有一个简单的查询,可以从DB中选择所有测验。
$mysqli->query("SELECT * FROM quizz WHERE quizz_level = $level");
要显示此结果,我会执行简单的foreach
。
我还有一个结果表,我保存了quizz的结果
result_id, user_id, quizz_id, result_value
现在我想修改原始foreach,如果特定quizz的特定用户存在结果,请以不同方式标记(如已回答)。
我打算执行以下操作,SELECT结果表并获取特定用户的所有quizz_id。把它放到一个数组中。在使用原始foreach显示quizz问题时,将其与结果数组中的键匹配。
这个问题有更好的解决方案吗?
可以通过mysql子查询完成吗?
P.S。可能是我有史以来最糟糕的题目:)
答案 0 :(得分:0)
怎么样
SELECT q.*,case when r.user_id = $user_id then 1 else 0 end case as answered
FROM quizz q
inner join results r on q.quizz_id = r.quizz_id
WHERE q.quizz_level = $level
然后过滤你的PHP代码上的答案
修改
我已经将左外部改为内部,因为左外部没有意义。还将联接的列更改为quizz_id
select会带来表quizz(q。*)中的所有记录,而内连接则链接到quizz_id列上的结果表。
然后在选择部分我用例来检查user_id是否是你要找的那个
case when r.user_id = $user_id then 1 else 0 end case as answered
然后recorset将包含所有quizz表列以及一个名为answers的列,如果值为1,则user_id应答quizz,如果为0,则user_id无法应答。