-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

你会得到类似的东西(我为这个例子创建的数据库)

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

1 个没有价格的产品 [BLOB -> 0B]

2 个产品有两个价格 200,400

3 产品一价 34

然后,在 php 中,按“,”分解分组字段并创建价格数组

于 2012-11-11T17:45:01.540 回答