2009-09-13 52 views
9
select * from A left join B on A.columnc=B.columnd 

resultados devueltos por encima SQL incluirá dos columnas de A y B.¿Cómo recuperar el resultado de la fila de MySQL con varias columnas del mismo nombre con PHP?

y lo que si A y B tienen algunas columnas con el mismo nombre?

¿Cómo recuperar el valor de PHP?

+0

se obtendría un error que indica columnas ambiguas - la base de datos no puede decir cuál de las dos columnas con nombres idénticos a utilizar. –

+4

@rexem: Eso no es verdad. El SQL es absolutamente correcto, el error ocurriría si la consulta seleccionara explícitamente un nombre de columna que existiera en ambas tablas, pero no especificara el prefijo de la tabla. – quosoo

Respuesta

18

Probablemente desee ser más explícito en su consulta. De esa manera usted puede proporcionar alias para sus columnas:

SELECT 
    A.foo as a_foo, 
    B.foo as b_foo 
FROM A 
LEFT JOIN B ON A.columnc = B.columnd 
+0

Si solo necesita unas pocas columnas de su segunda tabla, puede (en mysql, de todos modos) hacer algo como "SELECT a. *, B.column_that_also_exist_in_a como someAliase ..." – timdev

+0

@tim: Debería poder hacer esto en cualquier sistema de base de datos compatible con ANSI. –

7

La respuesta Es en realidad en el PHP documentation: precedencia

"Si dos o más columnas del resultado tienen los mismos nombres de campo, la última columna se llevará . para acceder a la otra columna (s) del mismo nombre, que sea necesario para acceder al resultado con índices numéricos utilizando mysql_fetch_row() o añadir nombres de alias. Véase el ejemplo en la descripción mysql_fetch_array() acerca de los alias. "

ayuda especialmente mysql_fetch_array() parece ser el mejor candidato cuando insisten en el uso de estrellas en la instrucción de selección:

$row = mysql_fetch_array($result, MYSQL_BOTH) 

A continuación, se puede hacer referencia a los campos unambigous por $row[name] y para el ambiguo por $row[col_number], pero que limita la portabilidad de su código (tal vez la próxima versión de MySQL va a devolver columnas en un orden diferente?). La solución recomendada es reescribir su consulta y enumerar todos los campos requeridos en lugar de usar estrella y para los ambiguos: use alias.

+0

puede proporcionar una demostración? – omg

1

En Java + MySQL del objeto ResultSet, puede usar, por ejemplo, getString ("a.id") y también getString ("b.id"), si su consulta es como "SELECCIONE a.id, b. id FROM a, b "

No sé si hay algo así en PHP.

Saludos

1

Esto puede ser útil a alguien: Debido a que estaba usando alguna de plantillas, que no podía usar fácilmente los alias cada vez, y yo quería que el arreglo asociativo para facilitar su uso. Pilcrow crédito por su respuesta en how to mysql_fetch_array on joined tables, but columns have same name, pero en MySQLi:

$qualified_names = array(); 
for ($i = 0; $i < mysqli_num_fields($result); ++$i) { 
    $fieldinfo=mysqli_fetch_field_direct($result,$i); 
    $table = $fieldinfo->table; 
    $field = $fieldinfo->name; 
    $qualified_names["$table.$field"]="$table.$field"; 
} 
$newrow = array_combine($qualified_names, mysqli_fetch_array($result,MYSQLI_NUM)); 
Cuestiones relacionadas