0

我有一个简单的查询,可以从 DB 中选择所有测验。

$mysqli->query("SELECT * FROM quizz WHERE quizz_level = $level");

为了显示这个结果,我做了简单的foreach.

我还有一个结果表,我可以在其中保存测验的结果

result_id, user_id, quizz_id, result_value

现在我想修改原始的foreach,如果特定用户的特定测验结果存在,请以不同的方式标记它(如回答)。

我打算执行以下操作,选择结果表并获取特定用户的所有 quizz_id。把它放到一个数组中。在进行原始 foreach 以显示测验问题时,将其与结果数组中的键匹配。

这个问题有更好的解决方案吗?

可以通过mysql子查询来完成吗?

ps可能是我有史以来最糟糕的问题:)

4

1 回答 1

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

选择从表 quizz (q.*) 中获取所有记录,并且通过内部连接链接到 quizz_id 列上的结果表。

然后在选择部分我用例检查 user_id 是否是您正在寻找的那个

 case when r.user_id = $user_id then 1 else 0 end case as answered

然后,recorset 将包含所有测验表列加上一个称为已回答的列,如果值为 1,则 user_id 回答了测验,如果值为 0,则 user_id 没有回答。

于 2013-03-06T19:27:00.273 回答