[英]MySQL: DISTINCT in GROUP_CONCAT remove same values (not duplicates)
我有两个表: items和item_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_CONCAT
和DISTINCT
。
像这样:
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.