gpt4 book ai didi

mysql - 检查用户匹配数组是否作为具有匹配列的链接表中的条目存在

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

我有一个具有以下结构的 channel 表:

CREATE TABLE IF NOT EXISTS `channels` (
`ID` int(20) NOT NULL,
`Name` varchar(50) NOT NULL,
`creatorID` int(11) NOT NULL,
`dateCreated` int(20) NOT NULL,
`isRead` tinyint(4) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;


INSERT INTO `channels` (`ID`, `Name`, `creatorID`, `dateCreated`, `isRead`) VALUES
(1, 'chat', 260, 1456307705, 1),
(2, 'chat2', 36, 1456326568, 0),
(3, 'chat3', 260, 1456737864, 1);

然后,我有一个 userChannels 表,其中列出了已受邀加入每个 channel 的所有成员。其格式如下:

CREATE TABLE IF NOT EXISTS `userchannels` (
`ID` int(11) NOT NULL,
`userID` int(11) NOT NULL,
`channelID` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

INSERT INTO `userchannels` (`ID`, `userID`, `channelID`) VALUES
(1, 36, 1),
(2, 260, 1),
(3, 36, 2),
(4, 1657, 2),
(5, 1657, 3),
(6, 260, 3);

我正在创建一个 Web 服务,以检查在 Web 服务中成为此 channel 成员的用户是否已存在于先前的 channel 中。因此,如果它们已经存在,我将传回现有的 ChannelID,如果不存在,我将创建一个新 channel 并添加条目。

因此,如果我要传递 36 和 260 的用户 ID,我不应该创建新 channel ,而是应该根据提供的测试数据传回 1 的 channel ID。但如果我要放弃 36、260 和 1657,我需要在 channel 表中创建一个新条目,因为一个 channel 中不存在所有 3 个用户的当前实例。

所以我想知道检查传递的用户是否已存在于 channel 中的最佳方法是什么?

我想我可能必须在 userChannels 表中使用 group by 并构建动态查询?但我真的不知道如何实现这个。

到目前为止我所拥有的是:

SELECT * FROM `userchannels` 
WHERE userID = ? or userid = ? group by channelID

这将返回独特的 channel 。我想我需要动态构建这个查询以继续添加 userid = ?取决于 Web 服务中传递的用户数组的长度。但我不知道从这里该去哪里。任何帮助表示赞赏。

最佳答案

SELECT * FROM `userchannels` 
WHERE userID in (user ids comma ceparated) group by channelID
HAVING count(userId)=<amount of user ids>

您可以使用 IN 列出所有用户 ID。如果对于 channel COUNT= 用户 ID 数量,则意味着所有用户都添加到同一 channel 。

关于mysql - 检查用户匹配数组是否作为具有匹配列的链接表中的条目存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35698034/

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