我有一个频道表结构如下:检查,如果用户的数组匹配的条目存在于连接表的匹配列
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表,列出了所有的成员谁已被邀请进入每个频道。这是格式如下:
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服务是这一渠道成员在先前的频道已经存在。因此,如果它们已经存在,我将传回现有的ChannelID,如果不存在,我将创建一个新频道并添加条目。
所以如果我要传递36和260的用户ID,我不应该创建一个新的频道,而应该根据提供的测试数据返回1的channelID。但是如果我要传递36,260和1657,我需要在频道表中创建一个新条目,因为在一个频道中不存在所有3个用户的当前实例。
所以我想知道检查用户传递的最佳方式是否已经存在于通道中?
我想我可能不得不利用groupCode在userChannels表中并构建一个动态查询?但我真的不知道如何实现这一点。
到目前为止,所有我拥有的是:
SELECT * FROM `userchannels`
WHERE userID = ? or userid = ? group by channelID
这是返回唯一通道。我想我需要动态构建这个查询来继续添加userid =?取决于在Web服务中传递的用户数组的长度。但我看不到从这里走到哪里。任何帮助赞赏。
'userID IN('? – artm
)所有的用户应该在同一个频道还是没有? –