我有一個頻道表結構如下:檢查,如果用戶的數組匹配的條目存在於連接表的匹配列
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
)所有的用戶應該在同一個頻道還是沒有? –