2014-01-20 37 views
-1

在我的網站上,我有一個頁面,用戶可以一次回答一個問題。 提供的問題存儲在問題表中。 當用戶回答問題時,它將存儲在答案表中。 回答完一個問題後,轉到下一個問題。用於在DB中選擇行的SQL

我的代碼的工作方式現在是它從問題表中選擇一個問題,然後加入答案表WHERE answers.id IS NULL。 (用戶還沒有回答這個問題。)

我需要它的工作方式類似於上面,除了它還需要檢查問題是否已被用戶回答,並且如果它有不顯示它並轉到用戶未答覆的下一個問題。

我希望我已經解釋得很清楚了。


我目前使用

$db = db_open(); 
$query = "SELECT 
      questions.id, 
      questions.question 
      FROM questions 
      LEFT JOIN answers ON questions.id = answers.question 
      WHERE answers.id IS NULL 
      GROUP BY questions.id"; 
$result = db_query($db,$query); 
$result = db_fetch_array($result); 
$default_question = array("id"=>$result["id"],"question"=>$result["question"]); 

問表

id question 
1 This is a question 

回答表

id user question answer 
1 1  1   This is an answer 
代碼
+1

你'answers.id'是主鍵我guess.correct? – user2936213

+0

對不起,我仍然覺得你想要的東西有點混亂。你是否在討論如果某個特定用戶沒有回答這個問題? –

+0

假設兩個用戶正在回答問題。他們都得到同樣的問題。如果用戶1先回答,他會得到下一個問題,用戶2仍然是第一個問題。它需要這樣工作。我認爲這是解釋它的一種更簡單的方法。 –

回答

1

嘗試這樣的:

$user_id = getUserIdOrSomethingLikeThat(); 
$query = "SELECT 
     questions.id, 
     questions.question 
     FROM questions 
     WHERE NOT EXISTS (
     SELECT * FROM answers WHERE answers.question = questions.id AND answers.user = $user_id 
    ) 

還要考慮重構你的表定義。列名稱令人困惑。像這樣的東西會更好:

問題表中的字段:ID,身體

回答表字段:ID,question_id,USER_ID,身體

+0

我試過這個。這是一個雙重否定。如果answers.id爲NULL,那麼爲什麼會有用戶ID? –

+0

編輯我的第一個答案。 – HarryFink

+0

工程就像一個魅力。謝啦! –