4

1回のクエリで3つのテーブルを選択し、すべての製品を価格で表示する方法は?

以下は私のデータベース構造(MySql)です:

カテゴリー

+-------------+------------+
 category_id  | parent_id  |
+-------------+------------+
  1           |      0     
  2           |      1
  3           |      1
  4           |      1
  5           |      2
  6           |      3

products_to_categories

+-------------+------------+
 product_id   | category_id|
+-------------+------------+
  54          |      0     
  55          |      2
  56          |      2
  57          |      2
  58          |      3
  59          |      3
  60          |      4

製品

+-------------+------------+
 product_id   |    price   |
+-------------+------------+
  54          |      10.50     
  55          |      11.20
  56          |      1.00
  57          |      22.20
  58          |      32.0
  59          |      32.0
  60          |      22.0

以下は私の状態です。

1. table categories : parent_id = '1'  
(result : 2,3,4)

2. table products_to_categories : category_id = result categories(result : 2,3,4) 
(result : 55,56,57,58,59,60)

3. table products : inner join or left join table product to display price where product_id = result products_to_categories(result : 55,56,57,58,59,60)

最終出力

  55 - 11.20
  56 - 1.00
  57 - 22.20
  58 - 32.0
  59 - 32.0
  60 - 22.0

この質問を投稿する前に、以前のクエリを次に示します (条件 2 に進む方法がわかりません)。

$sql_all = mysql_query("SELECT cat.parent_id,cat.category_id FROM categories cat WHERE cat.parent_id='1' ");
while($row = mysql_fetch_array($sql_all)) {
echo $row['categories_id'].'<br/>'; 
}

ありがとう。

4

3 に答える 3

2

これを試して、

SELECT  c.*
FROM    categories a
        INNER JOIN products_to_categories b
            ON a.category_id = b.category_id
        INNER JOIN products c
            ON b.product_id = c.product_id
WHERE  a.parent_id = 1

これにより、 = 1productsを持つテーブルのすべてのレコードが表示されます。parent_id

于 2012-09-10T16:02:07.553 に答える
1

次のクエリを見てください。

SELECT pro.product_id, SUM(pro.price) 
FROM categories cat 
JOIN products_to_categories ptc USING(category_id)
JOIN products pro ON ptc.product_id = pro.product_id
WHERE cat.parent_id='1'

上記のソリューションを使用すると、特定の製品でグループ化する場合に備えて、将来的に簡単に拡張できます...

于 2012-09-10T16:05:38.237 に答える
1

次のクエリは、必要な結果をもたらすはずです。

SELECT p.product_id, p.price
FROM products p
JOIN products_to_categories pc ON (pc.product_id = p.product_id)
JOIN categories c ON ((c.category_id = pc.category_id) AND (c.parent_id = "1"))

もちろん、 を1parent_idから他の値に変更して、それに応じて結果を取得することもできます。

注: この場合parent_id、WHERE 句ではなく JOIN 句で条件を指定すると、パフォーマンスが向上すると思います。

于 2012-09-10T16:11:04.703 に答える