У меня есть 3 таблицы. Один для пользователей, один для сообщений и таблица соединений, связывающая две другие таблицы.MySQL JOIN - Complicated Select Statement
Вот несколько примеров данных из таблицы соединений.
| id | user_id | post_id | timestamp |
|----|---------|---------|-----------|
| 1 | 1 | 1 | 4-17-2012 |
| 2 | 1 | 2 | 4-16-2012 |
| 4 | 2 | 2 | 4-17-2012 |
| 5 | 3 | 1 | 4-16-2012 |
|____|_________|_________|___________|
Я хочу написать запрос SELECT, который будет делать следующее:
1) Выбрать все сообщения для пользователя с временной меткой 4-17-2012
И
2) Если в таблице соединений для этого пользователя нет записи в столбце, выберите эти сообщения.
Итак ... Для user_id = 1, пост 1 будет выбран, но не пост 2, потому что после 2 не 4-17-2012 Для user_id = 2, обе должности будут выбраны, потому сообщению 1 нет записи для user_id = 2 и post_id = 1 и post 2, потому что это 4-17-2012 Для user_id = 3 сообщение 1 не будет возвращено, но сообщение 2 будет, потому что нет записи для user_id = 3 и post_id = 2.
Вот пример того, что я пытался:
SELECT * FROM сообщений AS р LEFT JOIN posts_users как пу ON (p.post_id = pu.post_id) WHERE ((pu.user_id = $ user_id AND pu.timestamp = 4-17-2012) ИЛИ (pu.post_id IS NULL)
Если в сообщениях было post_id = 3 строки, тогда у него будет NULL для все столбцы posts_users из-за LEFT JOIN, что помогает удовлетворить # 2. Но если есть кто-нибудь вообще с записью posts_users для post_id = 3, тогда не будет NULL. Есть ли способ в MySQL, что мы можем иметь логику для # 2?
Я делаю это все в рамках, которые уже были написаны на PHP, и таким образом, чтобы мне было очень сложно иметь дело с использованием PHP для фильтрации возвращаемых результатов. Доверься мне в этом. Есть ли способ использовать SQL-запрос для выполнения этого, или я должен попытаться сделать обходной путь в PHP после получения результатов какого-либо другого запроса?
Спасибо.
прогностического в этом, похоже, я мог использовать НЕ СУЩЕСТВУЮЩИЕ? Я никогда не использовал это раньше, как бы я использовал его в этом контексте? Еще раз спасибо. – MattDiamant