2012-08-25 29 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