如何针对结果表显示测验问题?

时间:2013-03-06 19:16:46

标签: php game-engine

我有一个简单的查询,可以从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。可能是我有史以来最糟糕的题目:)

1 个答案:

答案 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无法应答。