PHPでの関連テーブルからのデータ取得
ユーザーとその都市を一緒に取得するクエリを作成してみましょう。このためには
LEFT
JOINコマンドが必要になります:
その構文は次のようになります:
SELECT フィールド FROM テーブル名
LEFT JOIN 関連テーブル名 ON 結合条件
WHERE 選択条件
このコマンドの構文の個々の部分を詳しく見てみましょう。
フィールド
複数のテーブルから選択するため、
*によるすべてのフィールドの選択は
機能しません。次のクエリは、関連テーブルではなく
メインテーブルのフィールドのみを選択します:
SELECT *
すべてのテーブルからデータを選択するためには、
*の前に選択するテーブル名を
指定する必要があります:
SELECT users.*, cities.*
あるいは、必要なフィールドをテーブル名を 前置して列挙することもできます:
SELECT users.name, cities.name
これらの2つの方法には問題があります。それは、 テーブルのフィールド名が同じ場合、 PHPの配列内で名前の衝突が発生し、 一方のフィールドのみが残り、もう一方は 存在しなくなるということです。
この問題を解決するには、競合する名前を
asコマンドでリネームする必要があります:
SELECT users.name, cities.name as city_name
結合
ONコマンドの後には、2つのテーブル間の
結合が行われるフィールドを指定する必要があります。
今回の場合、都市テーブルのidフィールドと
ユーザーテーブルのcity_idフィールドになります:
ON cities.id=users.city_id
クエリ
最終的に、ユーザーとその都市を一緒に取得する クエリは次のようになります:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
実践問題
商品テーブルとそのカテゴリーテーブルがあるとします。 商品名とそのカテゴリーを一緒に取得する クエリを記述してください。