簡體   English   中英

如何過濾出用戶回答的問題?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM