gpt4 book ai didi

MySQL 从多个 ID 获取分组连接

转载 作者:行者123 更新时间:2023-11-28 23:12:43 26 4
gpt4 key购买 nike

我正在为包含一些媒体文件的压缩文件创建一个数据库。为了连接每个 .zip 中的文件,我使用了一个中间表 compressed_has_medium

数据库

medium           compressed_has_medium             compressed
id | filename id | medium_id | compressed_id id | filename
-------------- ------------------------------ -------------
1 | file1.mp3 1 | 1 | 1 1 | compressed1.zip
2 | file2.mp3 1 | 2 | 1 2 | compressed2.zip
3 | file3.mp3 1 | 3 | 1 3 | compressed3.zip
4 | file4.mp3 1 | 4 | 1
5 | file5.mp3 1 | 5 | 1
6 | file6.mp3 1 | 6 | 1
7 | file7.mp3 1 | 1 | 2
8 | file8.mp3 1 | 2 | 2
9 | file9.mp3 1 | 3 | 2

问题

我需要返回包含我发送给 MySQL 的 ID 的每个 .zip。如果 zip1 有文件 1、2、3、4、5、6 而我想要文件 3、4 的 zip,它应该返回 zip1。但是如果 zip2 有文件 1、2、3 而我请求文件 3、4,则不应返回。

部分解决方案

我已经尝试了很多并找到了这个解决方案:http://sqlfiddle.com/#!9/cb0864/37但这是一个非常丑陋的查询,而且可能效率不高。

SELECT c.*, GROUP_CONCAT(cm.medium_id) as media
FROM compressed as c
INNER JOIN compressed_has_medium as cm
ON cm.compressed_id = c.id
GROUP BY cm.compressed_id
HAVING (media LIKE '%,3,%' OR media LIKE '3,%' OR media LIKE '%3')
AND (media LIKE '%,4,%' OR media LIKE '4,%' OR media LIKE '%,4')

你知道更好的方法吗?

很多坦克!

最佳答案

也许这就是你所期待的我相信

我已经更改了您的 fiddle 中的查询:http://sqlfiddle.com/#!9/cb0864/62

SELECT c.*,GROUP_CONCAT(cm.medium_id) as media
FROM compressed as c
LEFT JOIN compressed_has_medium as cm
ON cm.compressed_id = c.id
WHERE cm.medium_id in (3,4)
GROUP BY cm.compressed_id
having sum(cm.medium_id in (3,4)) = 2 and // 2 represents the numbers of medium id you are entering
sum(cm.medium_id not in (3,4)) = 0

关于MySQL 从多个 ID 获取分组连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45235531/

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