簡體   English   中英

MySQL GROUP_CONCAT 和加入

[英]MySQL GROUP_CONCAT and JOIN

媒體表:

CREATE TABLE $media_table (
            `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
            `title` varchar(300) DEFAULT NULL,
            `options` longtext DEFAULT NULL,
            PRIMARY KEY (`id`)
}

表格示例:

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

類別表:

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`)
}

類型可以是“類別”或“標簽”(我猜這可能是枚舉)

表格示例:

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

我正在嘗試對 $media_taxonomy_table 中的類別和標簽進行 GROUP_CONCAT。

此查詢將返回僅包含類別的 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

結果,收到:

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

預期(我也需要標簽):

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

您可以進行條件聚合:

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

似乎你需要另一個 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM