![](/img/trans.png)
[英]How can I make some questions in a form required, depending on the questions answered?
[英]How can I filter out questions that have been answered by a user?
我正在使用AJAX,PHP和MySQL構建小型測驗/測試引擎。 所有數據(問題,答案等)都存儲在數據庫中。
我遇到的問題是我無法找出如何過濾已登錄用戶回答的問題,因此導致問題重復出現且永無休止的測驗/測試。
當您單擊“下一個問題”按鈕時,AJAX請求將發送到submit_answer.php
,后者提交答案(將行添加到user_answers
表中),並且還將請求發送到get_question.php
,然后該請求返回問題信息的JSON(問題,答案等),但我似乎無法選擇不回答的問題( user_answers
表中的問題)。 這是我現在得到的:
$question = mysql_query("SELECT *, q.id qid, q.question question_text
FROM questions q, user_answers ua
WHERE q.id != ua.question_id
AND ua.test_id = $test
AND ua.user_id = $_SESSION[userid]
ORDER BY rand()
LIMIT 1");
$q = mysql_fetch_assoc($question);
該查詢應該選擇具有當前測試的test_id
,具有user_id
作為當前用戶的問題,而不是位於user_answers
表中的問題。 但顯然,我只是做得不好。
您可以在此處查看整個get_question.php
文件: http : get_question.php
這是@MadaraUchiha要求的我的表結構:
questions
user_answers
SELECT *, q.id qid, q.question question_text
FROM questions q
WHERE NOT EXISTS (
SELECT TRUE
FROM user_answers ua
WHERE ua.question_id = q.id
AND ua.test_id = $test
AND ua.user_id = $_SESSION[userid]
)
ORDER BY rand()
LIMIT 1
您的查詢無法正常運行的原因是,只要至少有一個不屬於該問題的答案- 任何答案, q.id != ua.question_id
就會匹配。
您需要在問題與user_answers表之間建立左外部聯接。
最終查詢如下:
SELECT *, q.id qid, q.question question_text
FROM questions q left outer join
user_answers ua
on q.id = ua.question_id and
ua.test_id = $test and
ua.user_id = $_SESSION[userid]
WHERE ua.user_id is null
ORDER BY rand()
LIMIT 1
SELECT * FROM
questions q
WHERE
q.id NOT IN (
SELECT question_id as id
FROM user_answers
WHERE ua.test_id = $test AND ua.user_id = $_SESSION[userid]
)
附帶說明一下,在傳遞給SQL之前,請確保已正確清理數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.