MySQL:GROUP_CONCAT 中的 DISTINCT 删除相同的值(不重复)
MySQL: DISTINCT in GROUP_CONCAT remove same values (not duplicates)
我有两个 table:items 和 item_params。 Items table 是通常的项目列表,item_params 是 table 其中有几个参数名称和它的价值观。
+-----------------------------------------+
| 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[=31 具有相同的值=] 它 return 只有 80 厘米|110 厘米.
我怎样才能获得唯一的 param_name 及其所有 param_value 而不管相同的值?
查询的 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
,您可以拆分此字符串并在客户端代码中恢复参数名称和值。
我有两个 table:items 和 item_params。 Items table 是通常的项目列表,item_params 是 table 其中有几个参数名称和它的价值观。
+-----------------------------------------+
| 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[=31 具有相同的值=] 它 return 只有 80 厘米|110 厘米.
我怎样才能获得唯一的 param_name 及其所有 param_value 而不管相同的值?
查询的 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
,您可以拆分此字符串并在客户端代码中恢复参数名称和值。