我有两个表: 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 ,无论相同的值如何?
答案 0 :(得分:1)
查询的SELECT
子句中的表达式是独立的,每个表达式都只使用表达式中涉及的数据计算。
您可能需要将param名称与相应的param值相关联,然后将其传递给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
,您可以拆分此字符串并恢复客户端代码中的参数名称和值。