【问题标题】:mySQL GROUP_CONCAT IN JOINmySQL GROUP_CONCAT 加入
【发布时间】:2014-06-01 09:08:04
【问题描述】:

我有以下 SQL。我正在尝试在 Join 中执行 GROUP_CONCAT,但无论我看起来如何尝试它似乎都无法正常工作。

基本上有一个链接标签表,它在另一个保存标签的表上做一对多。因此,一篇文章记录可能有 8 个标签。我需要将它们连接在一起.vs。最终有 8 条记录。

SELECT 
  `articles`.`art_title`,
  `articles`.`art_bodytext`,
  `info`.`inf_start_date`,
  `info`.`inf_end_date`,
  `info`.`inf_hits`,
  `info`.`inf_acl`,
  `category`.`name`,
  `options`.`opt_tpl`,
  `options`.`opt_published`,
  `options`.`opt_options`,
  `options`.`opt_acl`,
  `tags`.`tag`
FROM
  `linktable`
  INNER JOIN `articles` ON (`linktable`.`lnk_data_id` = `articles`.`art_id`)
  INNER JOIN `info` ON (`articles`.`art_info_id` = `info`.`inf_id`)
  INNER JOIN `category` ON (`articles`.`art_cat_id` = `category`.`id`)
  AND (`articles`.`art_cat_tree_id` = `category`.`fid`)
  INNER JOIN `options` ON (`articles`.`art_opt_id` = `options`.`opt_id`)
  INNER JOIN `linktags` ON (`articles`.`art_tag_set_id` = `linktags`.`lnk_tagset_id`)
  LEFT OUTER JOIN GROUP_CONCAT(`tags`) ON (`linktags`.`lnk_tag_id` = `tags`.`tag_id`)
WHERE
  `linktable`.`lnk_pgc_id` = 1

【问题讨论】:

    标签: mysql join group-concat


    【解决方案1】:
    • GROUP_CONCAT()移动到字段列表中,不是连接条件,而是字段计算。
    • 添加GROUP BY 以查找要合并的行

    这给了

    SELECT 
      `articles`.`art_title`,
      `articles`.`art_bodytext`,
      `info`.`inf_start_date`,
      `info`.`inf_end_date`,
      `info`.`inf_hits`,
      `info`.`inf_acl`,
      `category`.`name`,
      `options`.`opt_tpl`,
      `options`.`opt_published`,
      `options`.`opt_options`,
      `options`.`opt_acl`,
      GROUP_CONCAT(`tags`.`tag`) AS tags
    FROM
      `linktable`
      INNER JOIN `articles` ON (`linktable`.`lnk_data_id` = `articles`.`art_id`)
      INNER JOIN `info` ON (`articles`.`art_info_id` = `info`.`inf_id`)
      INNER JOIN `category` ON (`articles`.`art_cat_id` = `category`.`id`)
      AND (`articles`.`art_cat_tree_id` = `category`.`fid`)
      INNER JOIN `options` ON (`articles`.`art_opt_id` = `options`.`opt_id`)
      INNER JOIN `linktags` ON (`articles`.`art_tag_set_id` = `linktags`.`lnk_tagset_id`)
      LEFT JOIN `tags` ON (`linktags`.`lnk_tag_id` = `tags`.`tag_id`)
    WHERE
      `linktable`.`lnk_pgc_id` = 1
    GROUP BY `articles`.`art_id`
    

    【讨论】:

    • 只是一点点旁注,您还可以定义分隔标签的内容。例如,GROUP_CONCAT(tags.tag SEPARATOR ', ')
    • @Eugen Rieck:谢谢!工作完美!... Kay:是的,我知道。只有我能找到我试图避免使用的子查询的例子。我真的需要在 youTube 上查看一堆关于 mySQL 的教程。
    • @Eugen Rieck:问题,是否可以根据选项表中的标志字段有条件地选择 art_bodytext?
    • 很简单的就是在字段列表中使用IF(options.flagfield=1,articles.art_bodytext,'') AS bodytext之类的东西。
    猜你喜欢
    • 2019-03-09
    • 2018-12-04
    • 2011-01-31
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 2014-01-25
    相关资源
    最近更新 更多