Получить вопросы, на которые вошедший в систему пользователь еще не ответил, используя PHP и MYSQL - PullRequest
0 голосов
/ 29 ноября 2018

Я хочу получить и отобразить ограниченное количество вопросов, на которые еще не ответил только зарегистрированный пользователь.

У меня уже есть этот блок кода, но я не могу найтиузнайте, как его выбрать для определенного вошедшего в систему пользователя.

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" - это пример идентификатора пользователя вошедшего в систему пользователя.

В "AND b.user_id = 2" я застрял.

Буду признателен за любую помощь.


ОБНОВЛЕНИЕ: Вот таблицаструктура

Таблица вопросов q_idвопрос

Вопросы_Ответы Таблица ans_idq_iduser_id

ОБНОВЛЕНИЕ: Я уже ответил на этот вопрос и добавил его ниже.Спасибо всем, кто предложил.Я тоже серьезно приму ваш совет.Я буду признателен, если вы подтвердите мой ответ, если попробуете и поймете, что я имел в виду.:)

Ответы [ 4 ]

0 голосов
/ 29 ноября 2018
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
0 голосов
/ 29 ноября 2018

Вы можете использовать левое соединение с

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 

Пожалуйста, проверьте ниже ссылку Как выбрать все записи из одной таблицы, которые не существуют в другой таблице?

0 голосов
/ 29 ноября 2018

И вот, после нескольких испытаний (спасибо всем, кто разместил их предложения), мне удалось получить данные, которые я хочу использовать, используя следующий блок кода.:)

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

Поделитесь этим, чтобы каждый, кто наткнулся на мой пост, получил правильный ответ.Я буду признателен, если вы проголосуете за этот, если вы попробовали код и получили ответ.:)

0 голосов
/ 29 ноября 2018

Меня немного смущает структура ваших таблиц, однако я попытался ответить на нее, предполагая, что вы храните ответы и отвечаете 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'

ИЛИ

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...