0 votes

Comment puis-je obtenir toutes les valeurs de champ d'une requête avec des tables jointes ?

J'ai cette question élémentaire :

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

et j'utilise MDB2 de PEAR pour l'exécuter et lire les valeurs de retour.

Mais d'une manière ou d'une autre, le tableau de résultats contient toujours des champs de la section order_positions tableau seulement !, c'est-à-dire que le tableau de résultat ressemble à ceci

row[code] = 'abc123'

alors que je veux qu'il ressemble à ceci

row[description] = 'my description'
row[code] = 'abc123'

J'ai déjà essayé ce qui suit :

  • Varier l'ordre des champs, c'est-à-dire code d'abord, puis description .
  • Varier l'ordre des tables jointes.
  • Utilisation des noms de table complets au lieu des alias.
  • J'ai utilisé la "jointure MySQL" à la place ( SELECT FROM table1, table2 WHERE table1.id = table2.id )
  • Alias utilisés avec et sans AS .

Quelques autres faits :

  • L'exécution de cette requête dans MySQL Query Browser fonctionne bien, tous les champs sont renvoyés.
  • Le site order_positions semble être préférée, quoi qu'il arrive. Lorsque je joins des tables supplémentaires, je n'obtiens toujours que les champs de cette table.

1voto

Daniel Rikowski Points 27193

OK, j'ai trouvé la cause :

Champs avec NULL ne sont pas ajoutées au tableau. Dans mon scénario de test description était en fait nul et n'était donc pas disponible dans le tableau.

Je vais quand même garder cette question (embarrassante), au cas où quelqu'un d'autre aurait ce problème à l'avenir.

Facepalm

0voto

code_burgar Points 6845

Cela devrait fonctionner :

SELECT d.description, o.code 
FROM order_positions o, article_descriptions d 
WHERE o.order_id = 1 AND d.article_id = o.article_id

0voto

Greg Points 132247

Tu es sûr que tu n'utilises pas fetchOne() par erreur au lieu de fetchRow() ?

Pourriez-vous afficher votre code PHP ?

Une autre possibilité est que dans votre code vous avez oublié la virgule :

SELECT a b

est la même chose que

SELECT a AS b

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X