我正在尝试将GROUP_CONCAT与DISTINCT一起使用,但是通过在不同的列上执行区分。 例如,我这样做:
GROUP_CONCAT(DISTINCT tags.tag SEPARATOR ' ') as tags"
但是标签可能是具有不同ID的相同字符,所以我需要做这样的事情:
GROUP_CONCAT(DISTINCT(tags.tag_id) tags.tag SEPARATOR ' ') as tags"
但是我找不到任何关于这个,有什么想法吗?
SIMPLIFIED表数据示例(模型和SQL请求在使用多个连接和表时要复杂得多):
项表:
item_id ,标题,...
1,史密斯,......
2,鲍勃,......
...
标签表:
tag_id ,标记, item_id ,...
1,蒙特利尔,1,......
2,多伦多,1,......
3,多伦多,1,......
4,纽约,2,......
...
MySQL查询:
...
SELECT items.item_id, items.title,
GROUP_CONCAT(DISTINCT tags.tag_id SEPARATOR ',') as tag_ids",
GROUP_CONCAT(DISTINCT tags.tag SEPARATOR ' ') as tags"
LEFT JOIN tags ON items.item_id = tags.item_id
GROUP BY items.item_id
..
预期结果:
item1.title =“史密斯”
item1.tag_ids =“1 2 3”
item1.tags =“蒙特利尔多伦多多伦多”
...
实际结果:
item1.title =“史密斯”
item1.tag_ids =“1 2 3”
item1.tags =“蒙特利尔多伦多”< - 因为不确定因素而导致失败
...
注意: 我想避免像
这样的子查询SELECT WHERE tags.item_id IN(SELECT ...)
答案 0 :(得分:0)
我不是100%确定你想要什么,但如果我是对的,你需要不同的tag_ids然后相应的标签名称,所以'蒙特利尔多伦多多伦多'对你来说没问题:
SELECT item_id,
GROUP_CONCAT(tag_id SEPARATOR ' ') AS tag_ids,
GROUP_CONCAT(tag SEPARATOR ' ') AS tags
FROM
(SELECT items.item_id AS item_id,
tags.tag_id AS tag_id,
tags.tag AS tag
FROM items
JOIN tags ON tags.item_id = items.item_id
GROUP BY 1,
2) AS distinct_groups
GROUP BY item_id