2012-10-12 8 views
5

Mögliche Duplizieren:
How to fetch result from MySQL row with multiple same-name columns with PHP?wie auf verknüpften Tabellen mysql_fetch_array, aber Spalten haben denselben Namen

Ich habe zwei Tabellen, und sie haben ähnliche Spaltennamen.

Abfrage ist:

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

Die Ergebnisse werden in ein Array setzen:

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

Sobald ich in dieser zweiten Tabelle hinzugefügt bemerkte ich die $aname TableB Daten verwendet hat.

Frage (s): Wie kann ich beide name Spalten speichern, funktioniert $row['a.name'] nicht. Meine Vermutung ist vielleicht, dass ich jedes Ergebnis in der Abfrage aliasieren muss. Irgendwelche Vorschläge? Sollte ich vermeiden, die Spaltennamen in der Zukunft geben?


I know mysql_* is depreciated. Save your energy.

+1

Hey, Wusstest du, dass mysql_ * veraltet ist? Entschuldigung, konnte nicht widerstehen. –

+0

Nein, ich habe keine roten Kästchen gesehen und weiß nicht, dass Sie über –

Antwort

7

Ihre Vermutung war richtig. Sie benötigen einen ALIAS für die Spalten erstellen, damit Sie es eindeutig holen kann,

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

dann können Sie jetzt

$row['Name1'] 
+2

sprechen. Ich wusste nicht, dass Sie Alias ​​ohne AS verwenden könnten. –

+0

Das ist, was ich dachte ... also gibt es keine Möglichkeit, die Tabelle zu verwenden Alias ​​stattdessen? –

+1

@Asad 'AS' ist optional: D –

6

nennen Es gibt einen Weg.

mysql_field_table() wird Ihnen den Namen eines Resultset-Felds mitteilen, gegeben durch $result Handle und Ordinalposition. In Verbindung mit mysql_field_name(), das sollte alles was Sie brauchen:

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

Sie könnten diese wickeln in Ihre eigene mysql_fetch_qualified_array Funktion, zum Beispiel, ein assoziatives Array auf "table.field" verkeilt zu geben:

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; 
} 
Verwandte Themen