mysql - SQL选择随机未回答的事情

标签 mysql

我正在构建一个调查对象,并且有三个表:usersquestionsanswers,其中answers code> 包含用户回答的每个问题的记录(如果他们还没有回答给定的问题则没有记录)。

我的数据结构是这样的:

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 来选择一个没有来自指定用户的相应答案的随机问题?

最佳答案

您使用 LEFT JOIN 走在正确的轨道上...

您可以使用它对具有WHERE column IS NULLINNER JOIN 进行反向选择。就这么简单:

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

关于mysql - SQL选择随机未回答的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12120874/

相关文章:

mysql - Doctrine 查询生成器,按生日过滤(使用 DateTime)?

php - MySQL 在 PHP 中未请求时返回最高的 id 值

php - Wordpress/PHP/MySql 排序结果

mysql - 在 laravel 查询中增加 +1 的更好方法?

mysql vb.net - 在绑定(bind)列表中存储 mysql 表

php - php中PDO查询语句期间如何转义?

mysql - sql交换列的主键

mysql - 具有可能的条件匹配的多表连接

php - 通知: Undefined index of a xml

mysql - 什么对 SHA1 散列列的查找速度最快?