¿Cómo puedo obtener todos los valores de campo de una consulta con las tablas combinadas?
Pregunta
Tengo primaria de la consulta:
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
y estoy usando MDB2
de PEAR
para ejecutar y leer los valores de retorno.
Pero de alguna manera la matriz de resultado siempre contiene los campos de la order_positions
tabla sólo!, es decir,el resultado de la matriz se parece a esto
row[code] = 'abc123'
mientras yo quiero ver como esta
row[description] = 'my description'
row[code] = 'abc123'
Ya he intentado lo siguiente:
- Variar el orden de los campos, es decir,
code
en primer lugar, a continuación,description
. - Variar el orden de las tablas combinadas.
- Utilizado completa de los nombres de tabla en lugar de alias.
- Utiliza el "MySQL unirse" en lugar de (
SELECT FROM table1, table2 WHERE table1.id = table2.id
) - Alias utilizados con y sin
AS
.
Algunos otros hechos:
- La ejecución de esta consulta en MySQL Query Browser funciona bien, se devuelven todos los campos.
- El
order_positions
tabla parece ser el preferido, no importa qué.Cuando se une con tablas adicionales todavía sólo obtener los campos de esta tabla.
Solución
OK, he encontrado la causa:
Los campos con NULL
los valores no se agrega a la matriz.En mi escenario de prueba description
de hecho fue nulo y, por tanto, no estaba disponible en la matriz.
Voy a mantener este (vergonzoso) de la pregunta, en caso de que alguien más tiene este problema en el futuro.
Facepalm http://www.scienceblogs.de/frischer-wind/picard-facepalm-thumb-512x409.jpg
Otros consejos
Esto debería 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
Está usted seguro de que no estés usando fetchOne()
por error en lugar de fetchRow()
?
Podría publicar su código PHP?
Otra posibilidad es que en el código que te perdiste de la coma:
SELECT a b
es el mismo
SELECT a AS b