gpt4 book ai didi

mysql - 根据多个条件查找相关文章

转载 作者:行者123 更新时间:2023-11-29 05:32:54 25 4
gpt4 key购买 nike

这个问题类似于this one但有一点不同:我有八种不同类型的标签。

像这样:

videos      [id, title]
tags1 [id, tag]
tags2 [id, tag]
tags3 [id, tag]
tags4 [id, tag]
tags5 [id, tag]
tags6 [id, tag]
tags7 [id, tag]
tags8 [id, tag]
video_tags1 [vid_id, tag_id]
video_tags2 [vid_id, tag_id]
video_tags3 [vid_id, tag_id]
video_tags4 [vid_id, tag_id]
video_tags5 [vid_id, tag_id]
video_tags6 [vid_id, tag_id]
video_tags7 [vid_id, tag_id]
video_tags8 [vid_id, tag_id]

给定一个 video.id,我想挑选出具有最多共同标签的相关视频。我发现很难找到一种方法来做到这一点,更不用说一种不会让服务器崩溃的方法了。

最佳答案

如果您可以更改数据库模型,那么这些建议可能适合您。

以这种方式重新定义您的表格:

videos      [id, title]
tags [id, tag_type,tag]
videos_tags [vid_id, tag_id]

您还可以添加一个 tag_type 表(它将有 8 行,每行对应一种您的标签类型)以提高一致性。

然后这个查询(它可能有一些语法错误,但我的意图是让你明白这个想法)会给你视频 ID 和与提供的标签匹配的标签的数量:

select 
videos.id, count(videos.id) as nEqualTags
from
videos videos inner join video_tags vtags on (vtags.vid_id=videos.id )
where
vtags.tag_id in (select tag_id from videos_tags where vt.id = ?)
group by
videos.id
order by
nEqualTags desc

如果 nEqualTags 低于特定值,您可以添加更多逻辑以减少结果。

(并且还考虑添加一些索引以获得更好的性能)。

希望对你有帮助

关于mysql - 根据多个条件查找相关文章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13273264/

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