2008-12-02 3 views
2

У меня возникают проблемы с SQL-запросом, используемым для отображения пользовательских полей профиля и любых (необязательных) соответствующих значений.MySQL LEFT JOIN Problem - Отсутствует столбец LEFT

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

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

ответ

7

Попробуйте переставить условие значения профиля к РЕГИСТРИРУЙТЕСЬ высказывание:

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 
+0

Большого спасибо - что сделал трюк! Никогда не знал, что я мог добавить такую ​​вещь в предложение «ON»! – Nick 2008-12-02 12:36:16