Como posso obter todos os valores de campo de uma consulta com tabelas associadas?

StackOverflow https://stackoverflow.com/questions/1492418

  •  18-09-2019
  •  | 
  •  

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, depois description.
  • 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.
Foi útil?

Solução

OK, eu encontrei a causa:

Campos com NULL valores são não adicionado à matriz. Na minha cenário de teste 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top