gpt4 book ai didi

MySQL 通过数据透视表进行过滤

转载 作者:行者123 更新时间:2023-11-29 10:20:25 24 4
gpt4 key购买 nike

我正在构建一个系统,需要能够根据多对多关系过滤搜索结果。

我有一个users表、一个bands和一个连接表band_user

我需要选择他们最喜欢的乐队都没有巡演或录音的用户。我在波段表 status 上有一个字段,我正在根据它进行过滤。

SELECT `u`.*, COUNT(`b`.`id`) as `band_count` FROM `users` `u`
LEFT JOIN `band_users` `bu` on bu`.`user_id` = `u`.`id`
LEFT JOIN `bands` `b` on `bu`.`band_id` = `b`.`id`
WHERE `b`.`status` = "touring"
GROUP_BY `u`.`id`
HAVING `band_count` > 0

此查询为我提供了至少有 1 个最喜欢的乐队设置为巡演(或在更改状态参数时进行录音)的所有用户的列表。

我想要做的是选择那些他们最喜欢的乐队都处于“空闲”状态的用户。

我还需要优先考虑至少有一个正在录音的乐队而不是巡演的用户,因此如果用户有一个最喜欢的乐队正在录音,并且有一个最喜欢的乐队正在巡演,则用户的总体状态是“正在录音” '

最佳答案

您可能只想选择最喜欢的乐队巡演或录音的用户。

SELECT `u`.*, COUNT(`b`.`id`) as `band_count` FROM `users` `u`
LEFT JOIN `band_users` `bu` on bu`.`user_id` = `u`.`id`
LEFT JOIN `bands` `b` on `bu`.`band_id` = `b`.`id`
WHERE `u`.`id` NOT IN (SELECT `u`.`id`
FROM `users` `u`
LEFT JOIN `band_users` `bu` on bu`.`user_id` = `u`.`id`
LEFT JOIN `bands` `b` on `bu`.`band_id` = `b`.`id`
WHERE `b`.`status` = "touring" OR `b`.`status` = "recording")
GROUP_BY `u`.`id`

说明

以下查询用于选择至少有一个收藏夹的用户乐队正在巡演或录音。

SELECT `u`.`id`
FROM `users` `u`
LEFT JOIN `band_users` `bu` on bu`.`user_id` = `u`.`id`
LEFT JOIN `bands` `b` on `bu`.`band_id` = `b`.`id`
WHERE `b`.`status` = "touring" OR `b`.`status` = "recording"

我没有完全理解您想要为录音乐队设置“优先级”的含义,因为所有巡演乐队和录音乐队都已在此查询中删除。

关于MySQL 通过数据透视表进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49365251/

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