-1

そのようなものを想像してみましょう:

SELECT * FROM products LEFT JOIN prices ON prices.PRODUCT_ID = products.ID;

これにより、次のようになります。

ID: 1; NAME: 'product with no price';   PRODUCT_ID: null; PRICE: null;
ID: 2; NAME: 'product with one price';  PRODUCT_ID: 2;    PRICE: 1000;
ID: 3; NAME: 'product with two prices'; PRODUCT_ID: 3;    PRICE: 2000;
ID: 3; NAME: 'product with two prices'; PRODUCT_ID: 3;    PRICE: 2500;

このアルゴリズムは以下を生成する必要があります。

array:
 product => (
  [0]
   id = 1
   name = product with no price
   prices = array()
  [1]
   id = 2
   name = product with one price
   prices = array(
    product_id: 2,
    price: 1000
   )
  [2]
   id = 3
   name = product with two prices
   prices = array(
    array(product_id: 3,
    price: 2000),
    array(product_id: 3,
    price: 2500)
   )

推移的な結合についても忘れないでください。つまり、価格 -> 製品ですが、commentOnPrice -> 価格 -> 製品の場合もあります。その複雑なアルゴリズムを作成することは可能ですか?

4

2 に答える 2

2

そんなことはできません。クエリの結果は線形であり、必要なものにグループ化することはできません。それらは一次元配列です。

これを行う最善の方法は、コードで手動でフォーマットすることPHPです。

于 2012-11-11T17:31:33.863 に答える
1

GROUP_CONCAT関数を使用して、「、」で区切られた文字列で価格を取得できます(私の例では)。

SELECT products.ID, products.NAME, GROUP_CONCAT(prices.PRICE) FROM products 
LEFT JOIN prices ON prices.PRODUCT_ID = products.ID 
GROUP BY products.ID, products.NAME

(この例のために作成したdb)のようなものが得られます

ID NAME GROUP_CONCAT(prices.PRICE、'、')

価格なしの1つの製品[BLOB->0B]

2つの価格で2つの製品200,400

1つの価格で3つの製品34

次に、phpで、グループ化されたフィールドを「、」で展開し、価格の配列を作成します

于 2012-11-11T17:45:01.540 に答える