MySQL LEFT JOIN Problema - Faltando coluna da esquerda
Pergunta
Estou tendo problemas com uma consulta SQL usada para campos de perfil de exibição personalizados e nenhum (opcional) valores correspondentes.
Aqui está a consulta SQL que estou usando:
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
O problema que estou tendo é que quaisquer colunas com nenhum registro profile_values
correspondentes não são mostrados em tudo, quando eles devem mostrar, mas apenas com um valor vazio.
Muito obrigado!
Solução
Tente mover as condições valores de perfil para a declaração 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow