Como posso obter todos os valores de campo de uma consulta com tabelas associadas?
Pergunta
Eu tenho esta consulta elementar:
SELECT d.description, o.code FROM order_positions AS o
LEFT JOIN article_descriptions AS d ON (o.article_id = d.article_id)
WHERE o.order_id = 1
e eu estou usando MDB2
a partir PEAR
para executá-lo e ler os valores de retorno.
Mas de alguma forma a matriz resultado sempre contém campos da tabela order_positions
única !, isto é, os olhares de matriz resultado como este
row[code] = 'abc123'
enquanto eu quer olhar como este
row[description] = 'my description'
row[code] = 'abc123'
Eu já tentei o seguinte:
- Varie a ordem dos campos, ou seja
code
primeiro, depoisdescription
. - Varie a ordem das tabelas associadas.
- nomes de tabela cheia usado em vez de aliases.
- usou o "MySQL juntar-se" em vez (
SELECT FROM table1, table2 WHERE table1.id = table2.id
) - aliases Usado com e sem
AS
.
Alguns outros fatos:
- Executar esta consulta no MySQL Query Browser funciona bem, todos os campos são devolvidos.
- A tabela
order_positions
parece ser preferido, não importa o quê. Quando se junta com mesas adicionais eu ainda só obter campos desta tabela.
Solução
OK, eu encontrei a causa:
Campos com NULL
description
era de fato nula e, portanto, não estava disponível na matriz.
Eu ainda vou manter esta questão (embaraçoso), apenas no caso de alguém tem esse problema no futuro.
Facepalm http://www.scienceblogs.de/ frischer-vento / Picard-facepalm-thumb-512x409.jpg
Outras dicas
Isso deve funcionar:
SELECT d.description, o.code
FROM order_positions o, article_descriptions d
WHERE o.order_id = 1 AND d.article_id = o.article_id
Tem certeza de que não está usando fetchOne()
por engano em vez de fetchRow()
?
Você poderia postar seu código PHP?
Outra possibilidade é que em seu código você perdeu a vírgula:
SELECT a b
é o mesmo que
SELECT a AS b