Problème MySQL LEFT JOIN - Colonne manquante LEFT
Question
Je rencontre des problèmes avec une requête SQL utilisée pour afficher les champs de profil personnalisés et les valeurs correspondantes (facultatives) correspondantes.
Voici la requête SQL que j'utilise:
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
Le problème que je rencontre est que toutes les colonnes ne contenant aucun enregistrement profile_values ??
ne sont pas affichées du tout, quand elles doivent apparaître, mais uniquement avec une valeur vide.
Merci beaucoup!
La solution
Essayez de déplacer les conditions de valeurs de profil vers l'instruction 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow