mysql GROUP_CONCAT DISTINCT 多列

标签 mysql tags

我有一个博客帖子的标签字段。标签具有唯一 ID,但其 displayName 可能重复。我想要的是一个选择帖子的查询,并且在 all_tags 字段中我们得到一对 (id,displayName) 是这样的:

id1,name1;id2,name2;id3,name3

我的查询如下:

select ....
CONCAT_WS(';', DISTINCT (CONCAT_WS(',',tags.id,tags.displayName))) AS all_tags
Join ...post content ...
Join ...post_tags ...
Join ...tags ...
ORDER BY posts.id

这行导致问题:

CONCAT_WS(';', DISTINCT (CONCAT_WS(',',tags.id,tags.displayName))) AS all_tags

我应该如何修改它?

有些人使用内部 (SELECT .. FROM) 但正如我听说的那样,它效率很低


SELECT `posts`.*,`categories`.*,`creators`.*,`editors`.*
CONCAT_WS(';', DISTINCT GROUP_CONCAT(CONCAT_WS(',',tags.id,tags.displayName))) AS all_ids
FROM (`posts`) 
LEFT JOIN `languages` ON `posts`.`language_id`=`languages`.`id` 
LEFT JOIN `users` as creators ON `posts`.`creatorUser_id`=`creators`.`id` 
LEFT JOIN `users` as editors ON `posts`.`lastEditorUser_id`=`editors`.`id` 
LEFT JOIN `userProfiles` as editors_profile ON `editors`.`profile_id`=`editors_profile`.`id` 
LEFT JOIN `categories` ON `posts`.`category_id`=`categories`.`id` 
LEFT JOIN `postTags` ON `postTags`.`post_id`=`posts`.`id` 
LEFT JOIN `tags` ON `postTags`.`tag_id`=`tags`.`id` 
LEFT JOIN `postTags` as `nodetag_checks` ON `nodetag_checks`.`post_id`=`posts`.`id` 
LEFT JOIN `tags` as `tag_checks` ON `nodetag_checks`.`tag_id`=`tag_checks`.`id` 
WHERE ( 9 IN(`tag_checks`.`id`,`tag_checks`.`cached_parents`) OR 10 IN(`tag_checks`.`id`,`tag_checks`.`cached_parents`) OR 11 IN(`tag_checks`.`id`,`tag_checks`.`cached_parents`)) 
GROUP BY `posts`.`id` ORDER BY `posts`.`created` desc LIMIT 0, 20  

最佳答案

试试这个:

GROUP_CONCAT(
  DISTINCT CONCAT(tags.id,',',tags.displayName) 
  ORDER BY posts.id 
  SEPARATOR ';'
)

关于mysql GROUP_CONCAT DISTINCT 多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18845170/

相关文章:

MySQL 内部连接?

mysql - 使用 mysqlsh 时如何抑制列标题输出?

php - Laravel 奇怪的 PDO fetchMode 问题

sql - SQL 中的分层标记

python - 如何在 wxpython html 窗口中插入动态字符串? (wx.html.html 窗口)

php - 可捕获的 fatal error : Object of class stdClass could not be converted to string in.。尝试插入数据库时

mysql - 如何编写 SQL 查询以找出 5 列中最高的 4 列的总和?

python - 从字符串中提取特定值

PHP MySql 显示返回的内容,而没有剥离 html 标签

svn - 如何确定与 SVN 工作副本关联的标签或分支?