【问题标题】:Group concat per row by getting all table results通过获取所有表结果对每行进行分组
【发布时间】:2013-10-01 12:25:56
【问题描述】:

对于我的搜索索引,我需要创建一个 sql 来获取 serval 表结果。

例如,我有以下表格;

  • 标签(在这张表中我得到了所有标签)
  • video_tags(在此表中,我得到与标签 id 相关的 video_id)
  • 视频(所有视频)

当我想获取带有标签的电影时,我使用以下查询;

SELECT 
  videos.id,
  videos.id AS video_id,
  videos.video_title AS video_title,
  Group_Concat(DISTINCT t.tag_name SEPARATOR '|') AS tag_names 
FROM videos
JOIN video_tags AS vt ON vt.video_id = videos.id 
JOIN tags AS t ON t.tag_id = vt.tag_id 
WHERE videos.id = '10'

这对我来说很完美。

现在我需要通过这样的方式从表中获取所有结果;

SELECT 
  videos.id,
  videos.id AS video_id,
  videos.video_title AS video_title,
  Group_Concat(DISTINCT t.tag_name SEPARATOR '|') AS tag_names 
FROM videos
JOIN video_tags AS vt ON vt.video_id = videos.id 
JOIN tags AS t ON t.tag_id = vt.tag_id 
WHERE videos.id <=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )

我在这里面临的问题是我如何使用 group_concat 函数。它结合了所有行 成一行(我能理解)。我的问题是,如何使用 group_concat 函数将所有标记结果放入单个字段但 PER 行。

例如现在出结果

id | video_id | video_title | tag_names
 1       1      title of id1   all tag_names from tags

我想要什么

 id | video_id | video_title | tag_names
 1       1      title of id1   tags fort this row 
 2       2      title of id2   tags fort this row

【问题讨论】:

    标签: mysql sql distinct group-concat


    【解决方案1】:
    SELECT videos.id,
           videos.id AS video_id,
           videos.video_title AS video_title,
           GROUP_CONCAT(DISTINCT t.tag_name SEPARATOR '|') AS tag_names 
    FROM   videos
    JOIN   video_tags AS vt
    ON     vt.video_id = videos.id 
    JOIN   tags AS t
    ON     t.tag_id = vt.tag_id 
    WHERE  videos.id <=
           (
           SELECT  max_doc_id
           FROM    sph_counter
           WHERE   counter_id = 1
           )
    GROUP BY
           videos.id
    

    【讨论】:

    • 完美!该组当然 :) 非常感谢,我会接受的时候会接受
    猜你喜欢
    • 2019-08-06
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2017-12-22
    • 2012-10-06
    • 1970-01-01
    相关资源
    最近更新 更多