2010-03-05 59 views
0

我有2个表:每行选择一个数组?

1. products 
- product_id 
- title 
2. product_categories 
- product_id 
- category_id 

每个产品可以具有一个以上的类别。我将这些信息存储在product_categories表中。当我在1个查询中选择一个产品时,我希望能够选择所有的category_ids。我怎样才能做到这一点?我有以下的,到目前为止,但它只会选择1个类别编号:

SELECT 
    p.*, 
    (SELECT 
    category_id 
    FROM 
    product_categories 
    WHERE product_id = p.product_id) as category_ids 
FROM 
    products AS p 
+0

那你所要的输出是什么样子?一个例子会有所帮助。 – 2010-03-05 14:52:56

+0

就像每行有多个暗淡的数组。因此,所有的一般产品信息都可以像PHP那样以$ row ['title']的形式获取,但类别可以是更多数组$ row ['product_categories'] [0]将获得第一个产品类别ID。 – David 2010-03-05 14:55:06

回答

0

你可以使用一个LEFT JOIN,GROUP BY和GROUP_CONCAT

How to use GROUP BY to concatenate strings in MySQL?

SELECT products.*, GROUP_CONCAT(category_id SEPARATOR ' ') 
FROM products LEFT JOIN product_categories 
       ON product_categories.product_id = products.product_id 
GROUP BY product_id; 
+0

非常接近我所需要的,但是我需要它将它作为一个数组返回。我将使用它与狮身人面像的MVA数据类型。 – David 2010-03-05 14:32:43

0

选择产品*,从 product_categories左外连接product_categories上product_categories.product_id = products.product_id