MySQL LEFT JOIN Проблема - отсутствует столбец LEFT - PullRequest
2 голосов
/ 02 декабря 2008

У меня проблемы с запросом 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 записей вообще не отображаются, когда они должны отображаться, а просто с пустым значением.

Большое спасибо!

1 Ответ

7 голосов
/ 02 декабря 2008

Попробуйте переместить условия значений профиля в оператор 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
...