MySQLの左には、インデックスに参加します

EXC:

私は、次のクエリを使用しました

select a.*,b.* from firsttable a left join secondtable b on a.id=b.item_id ORDER BY a.id DESC LIMIT 0,10

最初のテーブルのIDが第二のITEM_IDである2つのテーブルから項目を表示します。私は私が私が試すことができa.id表示したい場合は、PHPでこれを表示しようとすると、私の質問は、次のとおりです。

while($row=$go->fetch_assoc()){
echo $row['id'];
}

若しくは

while($row=$go->fetch_assoc()){
echo $row['a.id'];
}

両方のテーブルは、IDを持っているので、第一及び第二のテーブルと表示する第2のテーブルのIDと一致する行がある場合にのみ、第1の実施のディスプレイ上に、Iは最初のIDが欲しいです

第二に、それは未定義のインデックスは述べています。これは、してください、なぜあなたは説明できますか?

編集:例えば、テーブルを追加します

id
info
username

id
item.id
username
GMB:

使用する場合、両方のテーブルが同じ名前を持つ列を有しているので、select *それは、どの列に曖昧であるidにも関します。

あいまいさを削除する唯一の方法は、明示的にあなたがしたいすべての列を一覧表示することであるselect同音異義語の別名を使用して、:

select 
    a.id, 
    b.id b_id, -- alias for b.id
    b.item_id
    -- more columns here as needed
from firsttable a 
left join secondtable b on a.id=b.item_id 
order by a.id desc 
limit 0,10

これは多くの理由の一つでありselect *、一般的にSQLでの悪い習慣と考えられています。

読んオススメ:使用しない理由は何ですかselect *

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=16665&siteId=1