PHPでの関連テーブルからのデータ取得

ユーザーとその都市を一緒に取得するクエリを作成してみましょう。このためには LEFT JOINコマンドが必要になります:

その構文は次のようになります:

sqlSELECT フィールド FROM テーブル名
  LEFT JOIN 関連テーブル名 ON 結合条件 
WHERE 選択条件

このコマンドの構文の個々の部分を詳しく見てみましょう。

フィールド

複数のテーブルから選択するため、 *によるすべてのフィールドの選択は 機能しません。次のクエリは、関連テーブルではなく メインテーブルのフィールドのみを選択します:

sqlSELECT *

すべてのテーブルからデータを選択するためには、 *の前に選択するテーブル名を 指定する必要があります:

sqlSELECT users.*, cities.*

あるいは、必要なフィールドをテーブル名を 前置して列挙することもできます:

sqlSELECT users.name, cities.name

これらの2つの方法には問題があります。それは、 テーブルのフィールド名が同じ場合、 PHPの配列内で名前の衝突が発生し、 一方のフィールドのみが残り、もう一方は 存在しなくなるということです。

この問題を解決するには、競合する名前を asコマンドでリネームする必要があります:

sqlSELECT users.name, cities.name as city_name

結合

ONコマンドの後には、2つのテーブル間の 結合が行われるフィールドを指定する必要があります。 今回の場合、都市テーブルのidフィールドと ユーザーテーブルのcity_idフィールドになります:

sqlON cities.id=users.city_id

クエリ

最終的に、ユーザーとその都市を一緒に取得する クエリは次のようになります:

sqlSELECT 
  users.name, cities.name as city_name
FROM 
  users
LEFT JOIN cities ON cities.id=users.city_id

実践問題

Задание 1

商品テーブルとそのカテゴリーテーブルがあるとします。 商品名とそのカテゴリーを一緒に取得する クエリを記述してください。