首页 > 解决方案 > 将表与以逗号分隔的流派/类别表与链接表合并

问题描述

我正在制作一个 gif 数据库,我想在我的数据库中按流派存储每个 gif,我使用 3 个表,流派,gifs 和 gifs_genres,流派存储系统中的所有流派,gif 是实际的 gif 和它们的存储位置,而 gifs_genres 存储什么 gif 有什么流派

它们看起来像这样:
流派: gifs: gifs_genres:
流派

动图

gifs_genres

并且我希望能够搜索多种类型并仅找到所有类型的结果

期望的结果:(在 exel 中制作以展示)
过滤流派 36(可爱)
想要类型 36 的结果

如果我过滤 38 和 36(卡通可爱)
需要类型 36 和 38 的结果

我现在使用的是:

USE gifapi;
SELECT title, file, genre
FROM gifs
RIGHT JOIN gifs_genres ON  gifs.id = gifs_genres.gif_id
RIGHT JOIN genres ON gifs_genres.genre_id = genres.id
WHERE gifs_genres.genre_id = 36

我对 SQL 不是很有经验,所以我无法弄清楚这一点。我之前对 sql 所做的只是 Select * 和 UPDATE

我想要一个逗号分隔值的原因只是为了向用户显示 gif 是什么类型,我不会存储创建的表。

标签: mysqlsqldatabase

解决方案


having您可以使用子句加入、聚合和过滤:

select
    i.title,
    i.file,
    group_concat(e.genre order by e.id) genres
from gifs i
inner join gives_genre g on g.gif_id = i.id
inner join genres e on e.id = g.genre_id
group by i.title, i.file
having
    max(e.id = 36) = 1
    and max(e.id = 38) = 1

推荐阅读