MySQL JOIN для получения доступных фотографий - PullRequest
0 голосов
/ 01 августа 2011

Так вот моя проблема. У меня есть две таблицы, photos и users_homepage_photos. На моем сайте пользователи должны иметь возможность выбирать загруженные фотографии и отмечать их, чтобы они отображались на главной странице сайта.

В таблице photos хранятся все данные фотографии (URL-адрес изображения, имя, подпись и т. Д.), А в таблице users_homepage_photos содержится таблица перекрестных ссылок, состоящая из id, user_id и * 1009. *.

Я хочу написать запрос, который получит все фотографии доступные для использования на домашней странице , поэтому выберите все фотографии, которых НЕ в таблице users_homepage_photos.

Мой запрос на данный момент таков (с photos.user_id равным 4 в качестве моего идентификатора тестового пользователя):

SELECT photos.id, photos.user_id, photos.s3_thumb, photos.`name`, photos.`date`, photos.`caption`,
    users_homepage_photos.*
FROM photos
JOIN users_homepage_photos ON users_homepage_photos.`photo_id` != photos.id AND users_homepage_photos.`user_id` = 4
WHERE photos.user_id = 4

Вот проблема: - когда у пользователя есть 1 фотография уже в таблице users_homepage_photos, запрос работает отлично и выбирает все фотографии, кроме той, которая уже есть.

Однако , если у пользователя НЕТ фотографий на домашней странице, запрос выбирает 0 строк. Как мне получить все строки в этом случае?

Спасибо!

Jack

РЕДАКТИРОВАТЬ : снимки экрана с примерами данных.

SELECT * FROM users_homepage_photos

example query

SELECT * FROM photos WHERE user_id = 4

query

Наконец, когда я запускаю запрос, который отправил @gbn (вариант LEFT OUTER JOIN моего запроса):

query

Надежда, которая проливает свет на ситуацию.

1 Ответ

1 голос
/ 01 августа 2011

Попробуйте

SELECT photos.id, photos.user_id, photos.s3_thumb, photos.`name`, photos.`date`, photos.`caption`
FROM photos
WHERE(photos.user_id = 4)AND(NOT EXISTS(SELECT 1 FROM users_homepage_photos WHERE users_homepage_photos.`photo_id` = photos.id))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...