2012-10-12 166 views
5

Duplicar posible:
How to fetch result from MySQL row with multiple same-name columns with PHP?cómo mysql_fetch_array en tablas combinadas, pero las columnas tienen el mismo nombre

Tengo dos tablas, y comparten nombres de columna similares.

consulta es:

SELECT a.name,b.name 
FROM tablea a 
JOIN tableb b ON a.id = b.id 

Los resultados se ponen en una matriz:

while ($row = mysql_fetch_array($results)){ 
    $aname = $row['name']; 
} 

Una vez que he añadido en esa segunda mesa me di cuenta de la $aname estaba usando los datos de TableB.

Pregunta (s): ¿Cómo puedo almacenar tanto name columnas, $row['a.name'] no funciona. Creo que necesito alias cada resultado en la consulta. ¿Alguna sugerencia? ¿Debo misma no dar los nombres de las columnas en el futuro?


I know mysql_* is depreciated. Save your energy.

+1

Hey, ¿Sabías que mysql_ * está en desuso? Lo siento, no pude resistir. –

+0

no, yo no he visto ninguna cajas de color rojo y no sé que estás hablando –

Respuesta

7

Su suposición era correcta. Es necesario crear un ALIAS de las columnas para que pueda recogerlo de forma única,

SELECT a.name Name1, b.name Name2 
FROM tablea a 
JOIN tableb b ON a.id = b.id 

entonces usted puede ahora llamar

$row['Name1'] 
+2

Yo no sabía que se podía alias sin el uso de 'AS' –

+0

Eso es lo que pensaba ... lo que no hay manera de utilizar la tabla alias en cambio? –

+1

@Asad 'AS' es opcional: D Gracias –

6

Hay un camino.

mysql_field_table() le dirá el nombre de un campo de conjunto de resultados dado el $result mango y la posición ordinal. En conjunción con mysql_field_name(), que debería ser todo lo que necesita:

// Fetch the table name and then the field name 
$qualified_names = array(); 
for ($i = 0; $i < mysql_num_fields($result); ++$i) { 
    $table = mysql_field_table($result, $i); 
    $field = mysql_field_name($result, $i); 
    array_push($qualified_names, "$table.$field"); 
} 

Usted podría terminar con esto en su propia función mysql_fetch_qualified_array, por ejemplo, para darle una matriz asociativa enchavetado en "table.field":

function mysql_fetch_qualified_array($result) { 
    ... 
    // caching $qualified_names is left as an exercise for the reader 
    ... 
    if ($row = mysql_fetch_row($result)) { 
    $row = array_combine($qualified_names, $row);  
    } 
    return $row; 
} 
Cuestiones relacionadas