我在数据库中有三个表:一个是用户,第二个是问题,另一个是名为users_questions的数据透视表。关键是不应再向用户询问之前向用户询问的问题。所以我用question_id和user_id在数据透视表中插入一行。如何编写SQL语句以从表中获取行的id与表users_questions中的question_id不匹配的问题中的这样一个随机行,并且表users_questions中该行的user_id与当前签名的不匹配 - 在用户的ID中,是吗?
我尝试了LEFT JOIN,但是它将之前插入的问题提取到当前登录用户的表users_questions中。我试过的陈述如下:
SELECT * FROM questions LEFT JOIN users_questions ON questions.id != users_questions.question_id AND users_questions.user_id != 'some_id' ORDER BY RAND() LIMIT 1;
SELECT * FROM questions, users_questions WHERE questions.id != users_questions.question_id AND users_questions.user_id != 'some_id' ORDER BY RAND() LIMIT 1;
感谢。
答案 0 :(得分:0)
您可以对user_question的问题执行LEFT JOIN并查找空值
SELECT * FROM questions
LEFT JOIN users_questions ON questions.id = users_questions.question_id AND
users_questions.user_id = 'some_id'
WHERE user_questions.questions_id IS NULL
ORDER BY RAND() LIMIT 1
在将ORDER BY RAND()和LIMIT放入。
之前检查是否给出了正确的列表