繁体   English   中英

MySQL:GROUP_CONCAT中的DISTINCT删除相同的值(不重复)

[英]MySQL: DISTINCT in GROUP_CONCAT remove same values (not duplicates)

我有两个表: itemsitem_params Items表是通常的项目列表,而item_params是具有多个参数名称及其值的表。

+-----------------------------------------+
| id | item_id | param_name | param_value |
+-----------------------------------------+
|  1 |       1 | Width      | 80 cm       |
|  2 |       1 | Length     | 80 cm       |
|  3 |       1 | Height     | 110 cm      |
+-----------------------------------------+

我需要一个请求,因此查询如下:

SELECT i.*,
    GROUP_CONCAT(DISTINCT ip.param_name SEPARATOR '|') AS param_names,
    GROUP_CONCAT(DISTINCT ip.param_value SEPARATOR '|') AS param_values
FROM items i
LEFT JOIN item_params ip ON ip.item_id = i.item_id
WHERE i.item_id = 1
LIMIT 1

为了避免得到重复的值,我使用DISTINCT,但是如果param_value对于不同的param_name具有相同的值,则仅返回80 cm | 110 cm

我如何才能获得具有所有param_value的唯一param_name而不管它们的值如何?

查询的SELECT子句中的表达式是独立的,每个表达式仅使用表达式中涉及的数据进行计算。

您可能需要的是将参数名称与其对应的参数值粘合在一起,然后将它们传递给GROUP_CONCATDISTINCT

像这样:

SELECT i.*,
   GROUP_CONCAT(DISTINCT CONCAT(param_name, ':', param_value) SEPARATOR '|') AS params,
FROM items i
LEFT JOIN item_params ip ON ip.item_id = i.item_id
WHERE i.item_id = 1
GROUP BY i.item_id

该查询应产生Width:80 cm|Length: 80 cm|Height: 110 cm ,您可以拆分此字符串并在客户端代码中恢复参数名称和值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM