Соединение 3 таблиц... все в порядке... но только если во всех 3 таблицах есть данные

Сенсей

Новичок
Соединение 3 таблиц... все в порядке... но только если во всех 3 таблицах есть данные

Есть 3 таблицы

1 - users - Юзеры
2 - users_photos - Фотки юзеров с привязкой к Юзеры
3 - users_photos_rating - тут храняться оценки другими юзерами фотографий. Имеется привязка к users_photos

Есть cтраница (по &id= id фотки), на ней выводится фотка, имя юзера, форма для выбора оценки фотки (ну типа 1 - 2 - 3 - 4 - 5 через radio)
Плюс нужно вывести рейтиг по оценкам к данной фотке

Нужно все это сделать ОДНИМ запросом... связать 3 таюлицы...
Я сделал :

PHP:
select a.user_photo_user_id, a.user_photo_desc, a.user_photo_file, a.user_photo_date, a.user_photo_views, b.user_id, b.user_nick_name, sum(c.user_photo_rating_value), count(c.user_photo_rating_id) as voters from users_photos a, users b, users_photos_rating c where a.user_photo_id='138' AND b.user_id=a.user_photo_user_id AND c.user_photo_rating_to_photo_id='138' GROUP by c.user_photo_rating_to_photo_id
Все работает прекрасно... НО - только если в таблице оценок (users_photos_rating) имеется хотя бы одна оценка...

Если же это новая фотка... и ни кто за нее не голосовал... то запрос возвращает нулевой результат (это естественно, ибо по условию AND c.user_photo_rating_to_photo_id='138' он ничего не находит...

Как лечить?
 

Сенсей

Новичок
Ни когда раньше не юзал его...

Вот тут наляпал :

PHP:
select a.user_photo_user_id, a.user_photo_desc, a.user_photo_file, a.user_photo_date, a.user_photo_views, b.user_id, b.user_nick_name, sum(up.user_photo_rating_value), count(up.user_photo_rating_id) as everage from users_photos a, users b LEFT JOIN users_photos_rating as up ON up.user_photo_rating_to_photo_id='175' where a.user_photo_id='175' AND b.user_id=a.user_photo_user_id GROUP by up.user_photo_rating_to_photo_id
Подходит для моей задачи?
 

GeT

Новичок
Сенсей
А ты потесть, вот и выясним =) не получица - поправим :D
 

Сенсей

Новичок
Так работает... но не всегда все что работает - правильно реализовано

только если нет соответствия - не пойму... если не было найдено соответствие по LEFT JOIN , что происходит с

sum(up.user_photo_rating_value), count(up.user_photo_rating_id) as everage

проверил - evarage = 0 , а user_photo_rating_value - пустота...

я конечно могу сделать в самом скрипте intval и превратить его в нолик... но не уверен что это правильный подход
 
Сверху