[英]MySQL GROUP_CONCAT and JOIN
Media table:媒体表:
CREATE TABLE $media_table (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(300) DEFAULT NULL,
`options` longtext DEFAULT NULL,
PRIMARY KEY (`id`)
}
Table example:表格示例:
id title options
--------------------------
1 video ...
2 video ...
3 audio ...
Category table:类别表:
CREATE TABLE $media_taxonomy_table (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`type` varchar(15) DEFAULT NULL,
`title` varchar(300) DEFAULT NULL,
`media_id` int(11) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `media_id` (`media_id`)
}
type can be 'category' or 'tag' (I guess this could be enum)类型可以是“类别”或“标签”(我猜这可能是枚举)
Table example:表格示例:
id type title media_id
---------------------------------------
1 category rock 1
2 category trance 1
3 category trance 2
4 category rock 3
5 tag silent 1
5 tag loud 1
6 tag foo 2
I am trying to GROUP_CONCAT on both category and tag from $media_taxonomy_table.我正在尝试对 $media_taxonomy_table 中的类别和标签进行 GROUP_CONCAT。
This query will return GROUP_CONCAT with only category此查询将返回仅包含类别的 GROUP_CONCAT
SELECT mt.id, mt.title, mt.options, GROUP_CONCAT(mtt.title ORDER BY mtt.title ASC SEPARATOR ', ') as category
FROM $media_table as mt
LEFT JOIN $media_taxonomy_table as mtt
ON mt.id = mtt.media_id AND mtt.type='category'
WHERE playlist_id = %d
GROUP BY mt.id
Results, received:结果,收到:
id title options category
----------------------------------------
1 video ... rock, trance
2 video ... trance
3 audio ... rock
expected (I need tag as well):预期(我也需要标签):
id title options category tag
--------------------------------------------------------------
1 video ... rock, trance silent, load
2 video ... trance foo
3 audio ... rock
You can do conditional aggregation:您可以进行条件聚合:
SELECT
mt.id,
mt.title,
mt.options,
GROUP_CONCAT(CASE WHEN mtt.type = 'category' THEN mtt.title END ORDER BY mtt.title SEPARATOR ', ') as categories,
GROUP_CONCAT(CASE WHEN mtt.type = 'tag' THEN mtt.title END ORDER BY mtt.title SEPARATOR ', ') as tags
FROM $media_table as mt
LEFT JOIN $media_taxonomy_table as mtt ON mt.id = mtt.media_id
WHERE mt.playlist_id = %d
GROUP BY mt.id, mt.title, mt.options
Seems you need another group_concat so you need another join似乎你需要另一个 group_concat 所以你需要另一个加入
SELECT mt.id
, mt.title
, mt.options
, GROUP_CONCAT(mtt.title ORDER BY mtt.title ASC SEPARATOR ', ') as category
, GROUP_CONCAT(mtt2.title ORDER BY mtt.title ASC SEPARATOR ', ') as tag
FROM $media_table as mt
LEFT JOIN $media_taxonomy_table as mtt
ON mt.id = mtt.media_id AND mtt.type='category'
LEFT JOIN $media_taxonomy_table as mtt2
ON mt.id = mtt.media_id AND mtt.type='tag'
WHERE playlist_id = %d
GROUP BY mt.id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.