0

3 つのテーブルを持つデータベースがあります。

Products
MaterialsProducts
Materials

テーブル間の関係は次のようになります。

Materials 1-* MaterialsProducts *-1 Products

多くの場合、 200 以上の製品とそれに関連する材料データを (Materialsテーブルから) 取得する必要があります。

現在、次のように行われています。

SQL: 関連するすべての製品を選択します
PHP: 選択した製品を反復処理し、データベースを呼び出して各製品の材料データを選択します
(製品ごとにデータベース呼び出しを生成します!)

関連するすべての製品とその材料データを同時に選択する方法はありますか? それでも、各製品は結果で 1 行しか使用しません。

したがって、解決策は ではありません"SELECT * FROM products p, materialsproducts mp, materials m WHERE p.id = mp.productid AND m.id = mp.materialid WHERE x"。(その SELECT は、各製品が結果で複数の行を占めるようにします。)

4

4 に答える 4

0

このようなクエリで各製品の材料データを 1 つの行に圧縮するのは簡単ではありません。そのため、この計画はうまく機能しないと思います。

代わりに私がお勧めするのは、通常の JOIN クエリ (質問に入れて拒否したものとよく似ています) を使用し、PHP コードを使用して、リンクされているために単一の製品が結果セットに複数の行を持つ場合に対処することです。複数の素材に。

于 2013-04-15T08:40:40.823 に答える
0

GROUP_CONCAT製品ごとにグループ化しながら、同じ製品に関連する資料を単一のリストに結合するために使用できます。

SELECT
  p.ProductID,
  p.ProductName,
  GROUP_CONCAT(m.MaterialName) AS Materials
FROM Products p
INNER JOIN MaterialsProducts mp ON p.ProductID  = mp.ProductID
INNER JOIN Materials          m ON m.MaterialID = mp.MaterialID
GROUP BY
  p.ProductID,
  p.ProductName
;
于 2013-04-15T10:51:01.623 に答える