Как правильно сделать выборку из БД из двух таблиц?
Добрый день, уважаемые программисты. Нужна помощь знатоков. Суть вопроса:
Есть 2 таблицы 1- с комментариями и 2 - со списком игнор-лист пользователей.
Структура такая: ignore
userid - id пользователя, который добавил в игнор
useridWho - id пользователя, которого добавил в игнор другой пользователь (userid )
таблица comments
user_id - id пользователя, который создал комментарий.
Как извлечь записи из таблицы comments таким образом (для текущего пользователя, его можно идентифицировать через $_SESSION['ID']), чтобы в выборку не попали комментарии добавленных им в игнор пользователей?
И по логике, тому кого текущий пользователь добавил в игнор, тоже не должны быть видны комментарии данного пользователя.
Можно ли одним запросом реализовать подобную выборку?
ВЫБРАТЬ (атрибуты таблицы из таблицы комментариев) ИЗ таблицы комментариев ГДЕ КодПользователя НЕ СУЩЕСТВУЕТ в подзапросе (выборки из таблицы игнор-листа с таким же кодом пользователя).
Переводите это предложение буквально на синтаксис SQL - получите решение.
Честно, пробовал эту конструкцию написать, потратил много времени, но так и не смог допетрить. По идее, смысл то понятен вроде бы, что нужно из таблицы комментариев выбрать те записи, где user_id не соответствует выборке подзапроса из таблицы игнора, в которой осуществляется поиск записи где текущий пользователь не числится в игноре у автора. А вот как написать это чтобы работало, не могу сообразить ((
SELECT *,date_format(dateAdd,'%Y%m%d%H%i%s') as dateAdd FROM `comments` WHERE user_id != '24225' and news_id = '77278' order by id LIMIT 30;
и второй
SELECT userid
FROM `ignore`
WHERE userid = '24225' and useridWho = '6482')
Первый запрос выводит корректно данные 30 записей, исключая автора под ид 24225
Второй возвращает идентификатор пользователя, у которого я заблокирован
А в общем запросе
SELECT user_id FROM `comments` WHERE user_id != (SELECT userid
FROM `ignore`
WHERE userid = user_id and useridWho = '6482') and news_id = '77278' order by id DESC limit 30
Возвращает пустой результат. Что я делаю не так?
Изменил != на NOT IN, результаты появились. Буду тестировать корректные ли
По итогу, может кому пригодится. Решение корректное, на основе моих данных:
SELECT user_id FROM `comments` WHERE user_id NOT IN(SELECT useridWho
FROM `ignore`
WHERE userid = '6482' and useridWho = user_id) and news_id = '77278' order by id DESC limit 30
Структура такая: ignore
userid - id пользователя, который добавил в игнор
useridWho - id пользователя, которого добавил в игнор другой пользователь (userid )
таблица comments
user_id - id пользователя, который создал комментарий
'6482' - тут подставляем переменную, которая содержит идентификатор текущего пользователя, для которого идет получение комментариев на сайте