*
を使用している限り ワイルドカードを使用すると、同じ名前の列が連想配列の同じキーを上書きすることがわかります。
少なくとも1つのテーブルの列に列エイリアスを指定する必要があります:
select t1.*, t2.col1 as t2col1, t2.col2 as t2col2, ...
from table as t1 LEFT JOIN table as t2 ON t1.id=t2.rank
または、ワイルドカードを使用できますが、行を序数配列としてフェッチします:
$row = mysql_fetch_array($result, MYSQL_NUM);
echo $row[4];
コメントを再確認してください:SQLには*
だけがあります ワイルドカードは、「特定のテーブルのすべての列を、その自然な名前で」意味します。列ごとに、明示的に列のエイリアスを作成する必要があります。
例外:SQLiteを使用する場合は、 pragma full_column_names
があります。
結果セットが修飾された列名を返すようにするオプション。これにより、*
を使用できます。 ただし、キーにはテーブルエイリアスのプレフィックスが付いて戻ってきます。これはSQLite固有の非標準SQLです。