我正在构建调查问题,并有三个表:users
,questions
,answers
,其中answers
包含用户已回答的每个问题的记录(如果他们还没有回答某个问题,也没有记录。)
我的数据结构是这样的:
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 :(得分: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