使用PHP和MYSQL提取登录用户尚未回答的问题

时间:2018-11-29 06:23:59

标签: php mysql database

我想获取并显示仅由登录用户尚未回答的有限数量的问题。

我已经有了这段代码,但是我似乎无法找出如何为某个登录用户明确选择它。

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

更新: 我已经回答了这个问题,并在下面添加了它。谢谢所有提出建议的人。我也会认真考虑您的建议。如果您尝试过我的答案并明白我的意思,我将不胜感激。 :)

4 个答案:

答案 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