我想获取并显示仅由登录用户尚未回答的有限数量的问题。
我已经有了这段代码,但是我似乎无法找出如何为某个登录用户明确选择它。
SELECT
a.*
FROM
questions as a
LEFT JOIN
questions_answers as b
ON (a.q_id = b.q_id)
WHERE
b.q_id IS NULL
AND b.user_id = 2
ORDER BY
RAND() LIMIT 10
假设“ 2”是已登录用户的样本用户ID。
"AND b.user_id = 2"
是我被困住的地方。
我将不胜感激。
更新: 这是表格结构
问题表
q_id
问题
Questions_Answers表
ans_id
q_id
user_id
更新: 我已经回答了这个问题,并在下面添加了它。谢谢所有提出建议的人。我也会认真考虑您的建议。如果您尝试过我的答案并明白我的意思,我将不胜感激。 :)
答案 0 :(得分:0)
对于您的表结构,我有点困惑,但是我尝试回答这个问题,假设您正在存储答案并在答案表中回答users_id
-
更新:感谢您提供表结构,请参见下面的更新查询。
SELECT questions.*, questions_answers.*
FROM questions
LEFT JOIN questions_answers ON questions.q_id = questions_answers.q_id
WHERE questions_answers.user_id <> '2'
OR
SELECT questions.*, questions_answers.*
FROM questions
LEFT JOIN questions_answers ON questions.q_id = questions_answers.q_id
WHERE NOT(questions_answers.user_id = '2')
答案 1 :(得分:0)
您可以通过
使用左联接SELECT a.*
FROM questions as a
LEFT JOIN questions_answers as b ON (a.q_id = b.q_id)
WHERE b.q_id IS NULL
AND b.user_id = 2
请检查下面的链接How to select all records from one table that do not exist in another table?
答案 2 :(得分:0)
因此,在进行了几次试验之后(感谢每个发表了建议的人),我能够使用以下代码块来获取所需的数据。 :)
SELECT
a.*
FROM
questions as a
LEFT JOIN
questions_answers as b
ON (a.q_id = b.q_id) AND b.user_id = 2
WHERE
b.q_id IS NULL
ORDER BY RAND()
LIMIT 10
分享这些内容,以便每个偶然发现我的帖子的人都将获得正确的答案。如果您尝试过该代码并获得了答案,请多加赞赏。 :)
答案 3 :(得分:0)
SELECT
a.*
FROM
questions as a
WHERE
a.q_id not in(select q_id from questions_answers where user_id = 2)
ORDER BY
RAND() LIMIT 10
您可以通过简单的内部查询来实现。希望对您有帮助。
sqlfiddle:http://sqlfiddle.com/#!9/fee4ba/8
或
SELECT * FROM (SELECT
a.* ,b.ans_id
FROM
questions as a
left JOIN
questions_answers as b
ON (a.q_id = b.q_id) AND b.user_id = 2 ) as c
WHERE c.ans_id IS null
ORDER BY
RAND() LIMIT 10