【问题标题】:MySQL querying a junction table returns duplicate rowsMySQL 查询联结表返回重复行
【发布时间】:2017-08-17 09:16:56
【问题描述】:

我有以下表结构:

所以一个产品可能有多个product_type

当我在 MySQL 中加入时,每个 product_type 都会重复出现 product 记录。因此,例如,如果我有一个名为 Actifoam 的产品,并且它在 products_types 表中有 2 条记录,那么查询的结果将包括两次 Actifoam(每个都有不同的 product_type

这是我的查询:

SELECT DISTINCT product.*, product_type.name as product_type_name
FROM products_types
JOIN product_type ON product_type.id = products_types.product_type_id
JOIN product ON product.id = products_types.product_id

查询结果如下:

[
    0 => [
        'id' => 'recccAQHxsb4OEsX6'
        'name' => 'Actifoam'
        'product_type_name' => 'Silver Dressing'
    ]
    1 => [
        'id' => 'recccAQHxsb4OEsX6'
        'name' => 'Actifoam'
        'product_type_name' => 'Foam'
    ]
]

我不希望 product 记录像这样出现多次,如果有多个 product_types,我希望所有内容都出现在一行上。

有人知道我如何实现这一目标吗?

【问题讨论】:

    标签: php mysql join junction-table


    【解决方案1】:

    DISTINCT 仅当 SELECT 语句中的所有列的 2 行具有完全相同的对应值时才会返回唯一行。在您的情况下,您需要 GROUP BYGROUP_CONCAT

    GROUP_CONCAT 将返回product_type_name,以逗号分隔。

    SELECT product.*, GROUP_CONCAT(product_type.name) as product_type_name
    FROM products_types
    JOIN product_type ON product_type.id = products_types.product_type_id
    JOIN product ON product.id = products_types.product_id
    GROUP BY product.id
    

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2023-03-28
      • 1970-01-01
      • 2013-08-10
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      相关资源
      最近更新 更多