Я немного застрял с SQL-запросом.Я искал везде, но безрезультатно, поэтому надеялся, что кто-то здесь может помочь.
У меня есть 2 таблицы.
Таблица 1 представляет собой список уведомлений со следующими столбцами
notification_id
(это автоинкрементный первичный ключ) notification
(это сообщение уведомления) from_id
(это user_id отправляющего лицауведомление)
например.
| notification_id | notification | from_id |
| 25 | this message | 7 |
| 26 | that message | 8 |
В таблице 2 показано, какие пользователи прочитали каждое уведомление.Он имеет следующие столбцы
notification_id
(это идентификатор соответствующего уведомления) user_id
(Это идентификатор пользователя, прочитавшего уведомление)
например.
| notification_id | user_id |
| 25 | 1 |
| 25 | 2 |
| 25 | 3 |
| 26 | 2 |
Таблицы объединяются в notification_id
, и у нас есть отношение один ко многим, так как многие пользователи будут читать каждое уведомление.
Я пытаюсь сделать запрос к базе данных, чтобы вернуть все уведомления, которые конкретный пользователь еще не прочитал.Другими словами, я хочу получить данные из первой таблицы, но только если в таблице 2 нет записи, где user_id (My user_id
x) для соответствующего notification_id
.
Так что, если мой user_id
4, тогда я получаю данные как для notification_id
25, так и для 26, так как user_id
4 не указан в таблице 2 ни для одного из этих
Если мой user_id
равен 2, я не получаю никаких данныхкак user_id
2 указано в таблице 2 как прочитав оба notification_id
25 и 26
Если мой user_id
равен 1, я получаю данные для notification_id
26, но не 25
Я изначально думал, что смогу использовать это
SELECT
notification_id, notification, from_id
FROM table_1
INNER JOIN table 2
ON table_1.notification_id = table2.notification_id
WHERE table2.user_id != X
Но на самом деле это очень далеко от того, что мне нужно, и я зашел в тупик.
Спасибо