mysql - 将表与以逗号分隔的流派/类别表与链接表合并
问题描述
我正在制作一个 gif 数据库,我想在我的数据库中按流派存储每个 gif,我使用 3 个表,流派,gifs 和 gifs_genres,流派存储系统中的所有流派,gif 是实际的 gif 和它们的存储位置,而 gifs_genres 存储什么 gif 有什么流派
它们看起来像这样:
流派:
gifs:
gifs_genres:
并且我希望能够搜索多种类型并仅找到所有类型的结果
期望的结果:(在 exel 中制作以展示)
过滤流派 36(可爱)
我现在使用的是:
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 是什么类型,我不会存储创建的表。
解决方案
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
推荐阅读
- php - 在服务器发送事件和 PHP 中接收外部数据
- python-3.7 - ssl.SSLError: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 警报协议版本 (_ssl.c:1076) 错误
- fonts - 如何更改 JWPlayer 中的字幕/标题字体大小?
- bitbucket - 如何知道我的程序在 bitbucket 中的最新版本标签?
- assembly - 如何在汇编中使用带有 BYTE 参数的 SIZEOF?
- python - 当用户发送特定消息时,如何使用 Discord py 通过 webhook 在不和谐上发送消息
- oracle - 我可以在 Oracle 中找到特定时间段内的阻塞会话吗?
- r - 在 R(分类变量)中具有交互作用的 logit 模型的预测概率
- vue.js - Vue 中如何将 Videojs 与 Ant 媒体服务器集成?
- openwrt - 如何安装opgk?