gpt4 book ai didi

mysql - 通过获取所有表结果对每行进行分组

转载 作者:可可西里 更新时间:2023-11-01 08:06:08 26 4
gpt4 key购买 nike

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

例如,我有以下表格;

  • 标签(在这个表中我得到了所有的标签)
  • 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 函数将所有标记结果放入单个字段但按行排列。

例如现在的结果

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

最佳答案

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

关于mysql - 通过获取所有表结果对每行进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19012931/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com