この MySQL クエリを完了したばかりですが、自分自身をまだ初心者だと考えているため、これを最も効率的な方法で実行したかどうか疑問に思っていました。
私は 4 つのテーブルを持っています。最初の 2 つには、互いにリンクする必要があるカテゴリ データとカテゴリの関連付けが含まれています。3 番目の表には製品情報が含まれ、4 番目の表には価格が含まれます。一部の製品には複数の価格があり、最低価格のみが必要です。
**Category Data**
cat_id cat_name
|:-----------|------------:|
| 21 | Cat One |
| 22 | Cat Two |
**Category Associations**
ca_id cat_id prod_id
|:-----------|------------:|:------------:|
| 1 | 21 | 83 |
| 2 | 22 | 88 |
**Product Info**
prod_id prod_name brand_name
|:-----------|------------:|:------------:|
| 83 | Prod One | Brand One |
| 88 | Prod Two | Brand Two |
**Prices**
prod_id price_id
|:-----------|------------:|
| 83 | 22.15 |
| 83 | 25.66 |
| 88 | 47.23 |
| 88 | 12.22 |
これが出力として必要なデータです
prod_id prod_name brand_name cat_name lowest_price
|:-----------|------------:|:------------:|:------------:|:------------:|
| 83 | Prod One | Brand One | Brand Two | 22.15 |
| 88 | Prod Two | Brand Two | Brand Two | 12.22 |
多くのデータを省略し、簡単にするために基本のみを示しました。
このクエリは機能します。それを改善できるかどうか疑問に思っています。データは配列に格納され、javascript を使用してソートされます。
SELECT `".DB_PREFIX."products`.prod_id, `".DB_PREFIX."products`.prod_name, `" . DB_PREFIX . "products`.prod_brand, `" . DB_PREFIX . "categories`.cat_name, `" . DB_PREFIX . "products`.prod_image, `" . DB_PREFIX . "products`.prod_field_one, `" . DB_PREFIX . "products`.prod_field_two, `" . DB_PREFIX . "products`.prod_field_three, `" . DB_PREFIX . "products`.prod_field_four, `" . DB_PREFIX . "products`.prod_field_five, `" . DB_PREFIX . "products`.prod_field_six, MIN(`" . DB_PREFIX . "prices`.price) as LowestPrice
FROM (`".DB_PREFIX."products`
INNER JOIN `".DB_PREFIX."category_associations` ON `".DB_PREFIX."products`.prod_id = `".DB_PREFIX."category_associations`.prod_id)
INNER JOIN `".DB_PREFIX."categories` ON `".DB_PREFIX."category_associations`.cat_id = `".DB_PREFIX."categories`.cat_id
INNER JOIN `" . DB_PREFIX . "prices`
ON `" . DB_PREFIX . "prices`.prod_id = `" . DB_PREFIX . "products`.prod_id
GROUP BY `" . DB_PREFIX . "prices`.prod_id`
ありがとう、サイモン