У меня три таблицы, одна для пользователей, одна для изображений и одна, которая отображает изображения пользователям. Вот мой запрос (упрощенный):
"SELECT * FROM tb_users u, tb_images i, tb_mapimagestousers m
WHERE
u.id = :userid
AND
m.userid = u.id
AND
i.id = m.imgid
Этот запрос будет возвращать штраф до тех пор, пока данные будут извлекаться из всех таблиц. Если нет изображения, назначенного пользователю, в них не будет записи для изображений или таблиц mapimagestousers, и запрос вернет пустой набор (понятно). Как я запрашиваю базу данных, чтобы в случае отсутствия назначенного изображения я все равно получал все, что я вытащил из таблицы пользователей?
Никогда не используйте запятые в предложении FROM
. Всегда используйте правильный, явный, стандартный синтаксис JOIN
.
Тогда вы узнаете о внешних соединениях.
Ты хочешь:
SELECT *
FROM tb_users u LEFT JOIN
tb_mapimagestousers miu
ON miu.userid = u.id LEFT JOIN
tb_images i
ON miu.imgid = i.id
WHERE u.id = :userid;
FROM
?