2012-08-25 69 views
1

我建立一個調查事情懸而未決隨意的事情,有三個表:usersquestionsanswers,其中answers包含了每一個問題,用戶已經回答了創紀錄的(沒有記錄,如果他們沒有回答一個給定的問題呢)。SQL選擇

我的數據結構是這樣的:

CREATE TABLE users (
    id INT NOT NULL, 
    name VARCHAR(255), 
    PRIMARY KEY (id) 
    ) 

CREATE TABLE questions (
    id INT NOT NULL, 
    text VARCHAR(255), 
    PRIMARY KEY (id) 
    ) 

CREATE TABLE answers (
    id INT NOT NULL, 
    id_q INT NOT NULL, 
    id_u INT NOT NULL, 
    answer VARCHAR(255), 
    PRIMARY KEY (id), 
    FOREIGN KEY (id_q) REFERENCES questions(id), 
    FOREIGN KEY (id_u) REFERENCES users(id) 
    ) 

我試着LEFT JOIN一些基本的東西,這樣無濟於事。我已經使用ORDER BY RAND() LIMIT 0,1作爲問題的隨機部分。我懷疑這並不像我想象的那麼簡單。 (我在教自己的SQL ..我需要使用那些我還不知道的子查詢之一嗎?)

如何編寫MySQL以選擇一個沒有來自指定用戶的相應答案?

+0

此外,請原諒問題標題中的「事物」的通用使用,因爲我們不能發佈包含單詞「問題」的標題的問題。 C'est la vie :) – Erics

回答

3

你在正確的軌道上LEFT JOIN ...

你可以用它來作一個INNER JOIN的逆選擇與WHERE column IS NULL。這很簡單:

SELECT q.* 
FROM  questions q 
LEFT JOIN answers a ON q.id = a.id_q AND a.id_u = <user id here> 
WHERE  a.id IS NULL 
ORDER BY RAND() 
LIMIT  1 
+0

Ahah,我看到你做了什麼 - 你使用'answers.id_u'特性來創建連接表,而不是使用WHERE過濾器。 – Erics