0

DB からすべてのクイズを選択する単純なクエリがあります。

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

この結果を表示するには、 simple を実行します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 に変更しました

select はテーブル 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 に答える