2012-10-12 9 views
5

Eventuali duplicati:
How to fetch result from MySQL row with multiple same-name columns with PHP?come mysql_fetch_array su tabelle unite, ma le colonne hanno lo stesso nome

Ho due tabelle, e condividono i nomi delle colonne simili.

Query è:

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

I risultati vengono messi in un array:

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

Una volta ho aggiunto nella seconda tabella che ho notato la $aname stava usando i dati di TableB.

Domanda (s): Come posso archiviare sia name colonne, $row['a.name'] non funziona. La mia ipotesi è forse ho bisogno di alias ogni risultato nella query. Eventuali suggerimenti? Dovrei evitare di dare i nomi delle colonne in futuro?


I know mysql_* is depreciated. Save your energy.

+1

Hey, lo sapevi che mysql_ * è deprecato? Scusa, non ho potuto resistere. –

+0

No, non ho visto nessuna casella rossa e non so che stai parlando di –

risposta

7

vostra congettura aveva ragione. È necessario creare un ALIAS per le colonne in modo da poter recuperare in modo univoco,

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

allora si può ora chiamare

$row['Name1'] 
+2

Non sapevo che si potesse alias senza usare 'AS' –

+0

Questo è quello che pensavo ... quindi non c'è modo di usare la tabella alias invece? –

+1

@Asad 'AS' è facoltativo: D –

6

C'è un modo.

mysql_field_table() ti dirà il nome del campo di un set di risultati dato l'handle $result e la posizione ordinale. In concomitanza con mysql_field_name(), che dovrebbe essere tutto ciò che serve:

// 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"); 
} 

Si potrebbe avvolgere questo nella vostra propria funzione mysql_fetch_qualified_array, ad esempio, per darvi un array associativo calettato su "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; 
} 
Problemi correlati