mysql组\u concat and join

zwghvu4y  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(380)

媒体表:

  1. CREATE TABLE $media_table (
  2. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  3. `title` varchar(300) DEFAULT NULL,
  4. `options` longtext DEFAULT NULL,
  5. PRIMARY KEY (`id`)
  6. }

表格示例:

  1. id title options
  2. --------------------------
  3. 1 video ...
  4. 2 video ...
  5. 3 audio ...

类别表:

  1. CREATE TABLE $media_taxonomy_table (
  2. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  3. `type` varchar(15) DEFAULT NULL,
  4. `title` varchar(300) DEFAULT NULL,
  5. `media_id` int(11) unsigned DEFAULT NULL,
  6. PRIMARY KEY (`id`),
  7. INDEX `media_id` (`media_id`)
  8. }

类型可以是“category”或“tag”(我猜这可能是enum)
表格示例:

  1. id type title media_id
  2. ---------------------------------------
  3. 1 category rock 1
  4. 2 category trance 1
  5. 3 category trance 2
  6. 4 category rock 3
  7. 5 tag silent 1
  8. 5 tag loud 1
  9. 6 tag foo 2

我正在尝试从$media\u taxonomy\u表中对\u concat的category和tag进行分组。
此查询将返回只有类别的组\u concat

  1. SELECT mt.id, mt.title, mt.options, GROUP_CONCAT(mtt.title ORDER BY mtt.title ASC SEPARATOR ', ') as category
  2. FROM $media_table as mt
  3. LEFT JOIN $media_taxonomy_table as mtt
  4. ON mt.id = mtt.media_id AND mtt.type='category'
  5. WHERE playlist_id = %d
  6. GROUP BY mt.id

结果,收到:

  1. id title options category
  2. ----------------------------------------
  3. 1 video ... rock, trance
  4. 2 video ... trance
  5. 3 audio ... rock

预期(我也需要标签):

  1. id title options category tag
  2. --------------------------------------------------------------
  3. 1 video ... rock, trance silent, load
  4. 2 video ... trance foo
  5. 3 audio ... rock
ih99xse1

ih99xse11#

您可以执行条件聚合:

  1. SELECT
  2. mt.id,
  3. mt.title,
  4. mt.options,
  5. GROUP_CONCAT(CASE WHEN mtt.type = 'category' THEN mtt.title END ORDER BY mtt.title SEPARATOR ', ') as categories,
  6. GROUP_CONCAT(CASE WHEN mtt.type = 'tag' THEN mtt.title END ORDER BY mtt.title SEPARATOR ', ') as tags
  7. FROM $media_table as mt
  8. LEFT JOIN $media_taxonomy_table as mtt ON mt.id = mtt.media_id
  9. WHERE mt.playlist_id = %d
  10. GROUP BY mt.id, mt.title, mt.options
nwsw7zdq

nwsw7zdq2#

似乎你需要另一个团体的参与所以你需要另一个加入

  1. SELECT mt.id
  2. , mt.title
  3. , mt.options
  4. , GROUP_CONCAT(mtt.title ORDER BY mtt.title ASC SEPARATOR ', ') as category
  5. , GROUP_CONCAT(mtt2.title ORDER BY mtt.title ASC SEPARATOR ', ') as tag
  6. FROM $media_table as mt
  7. LEFT JOIN $media_taxonomy_table as mtt
  8. ON mt.id = mtt.media_id AND mtt.type='category'
  9. LEFT JOIN $media_taxonomy_table as mtt2
  10. ON mt.id = mtt.media_id AND mtt.type='tag'
  11. WHERE playlist_id = %d
  12. GROUP BY mt.id

相关问题