【问题标题】:Select an array per row?每行选择一个数组?
【发布时间】:2010-03-05 14:08:26
【问题描述】:

我有 2 张桌子:

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

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

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

【问题讨论】:

  • 您希望输出是什么样的?举个例子会有所帮助。
  • 每一行都像一个多维数组。所以所有的一般产品信息都可以像 $row['title'] 这样在 PHP 中检索,但类别将是一个进一步的数组 $row['product_categories'][0] 将获得第一个产品类别 ID。

标签: mysql select arrays


【解决方案1】:

您可以使用左连接、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;

【讨论】:

  • 非常接近我的需要,但是我需要它作为数组返回。我将使用 sphinx 的 MVA 数据类型。
【解决方案2】:

选择产品。*,product_categories from 左外连接 product_categories on product_categories.product_id = products.product_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    相关资源
    最近更新 更多