Проблема с ЛЕВЫМ СОЕДИНЕНИЕМ в MySQL - Отсутствует ЛЕВЫЙ столбец
Вопрос
У меня возникли проблемы с SQL-запросом, используемым для отображения пользовательских полей профиля и любых (необязательных) соответствующих значений.
Вот SQL-запрос, который я использую:
SELECT pf.`id`, pf.`name`, pv.`value` FROM `profile_fields` AS pf
LEFT JOIN `profile_values` AS pv ON (pf.`id` = pv.`field_id`)
WHERE (pf.`site_id` = '0' OR pf.`site_id` = '%d') AND (pv.`user_id` = '%d' OR pv.`user_id` IS NULL)
ORDER BY pf.`order` ASC
Проблема, с которой я сталкиваюсь, заключается в том, что любые столбцы без соответствующих profile_values
записи не отображаются вообще, когда они должны отображаться, а просто с пустым значением.
Большое спасибо!
Решение
Попробуйте переместить значения профиля conditions в инструкцию JOIN:
SELECT pf.`id`, pf.`name`, pv.`value` FROM `profile_fields` AS pf
LEFT JOIN `profile_values` AS pv ON (
pf.`id` = pv.`field_id` AND
(pv.`user_id` = '%d' OR pv.`user_id` IS NULL)
)
WHERE (pf.`site_id` = '0' OR pf.`site_id` = '%d')
ORDER BY pf.`order` ASC
Не связан с StackOverflow