Solange Sie den *
verwenden Platzhalter, werden Sie feststellen, dass Spalten mit demselben Namen dieselben Schlüssel in Ihrem assoziativen Array überschreiben.
Sie müssen den Spalten aus mindestens einer der Tabellen Spaltenaliase zuweisen:
select t1.*, t2.col1 as t2col1, t2.col2 as t2col2, ...
from table as t1 LEFT JOIN table as t2 ON t1.id=t2.rank
Oder Sie können den Platzhalter verwenden, aber die Zeile als ordinales Array abrufen:
$row = mysql_fetch_array($result, MYSQL_NUM);
echo $row[4];
Zu Ihrem Kommentar:SQL hat nur den *
Platzhalter bedeutet "alle Spalten aus einer bestimmten Tabelle mit ihren natürlichen Namen". Sie müssen Spalten explizit Spalte für Spalte aliasieren.
Ausnahme:Wenn Sie SQLite verwenden, gibt es ein pragma full_column_names
Option, die bewirkt, dass die Ergebnismenge qualifizierte Spaltennamen zurückgibt, sodass Sie *
verwenden können aber die Schlüssel kommen mit dem Präfix der Tabellenaliasnamen zurück. Dies ist SQLite-spezifisches und nicht standardmäßiges SQL.