如何检查用户X是否与Y在同一组中?
我正在制作聊天应用程序,我需要知道用户X是否已经打开了与用户Y的聊天组。因为如果是,那么就不要创建新组。
userId | chatGroup
---------|---------------------
X | bananas
Y | bananas
3 | oranges
...
像..
$qry = $db->prepare('SELECT id FROM chatUsers WHERE userId = :userIdFrom AND chatGroup = "bananas" AND userId = :userIdTo AND chatGroup = "bananas"');
$qry->bindParam(':userIdFrom', $userIdFrom, PDO::PARAM_INT);
$qry->bindParam(':userIdTo', $userIdTo, PDO::PARAM_INT);
$qry->execute();
答案 0 :(得分:1)
您可以使用以下查询:
SELECT * FROM table_name t1
INNER JOIN table_name t2
ON t1.chatGroup = t2.chatGroup
WHERE t1.userId = 'X'
AND t2.user_id = 'Y'
AND t1.chatGroup = 'bananas'
如果您不知道聊天室名称,则可以跳过查询中的最后WHERE
条件。
答案 1 :(得分:1)
您可以使用子选择执行此操作:
SELECT 1 FROM chatUsers WHERE userID = :userIdFrom AND chatGroup = (SELECT chatGroup FROM chatUsers WHERE userID = :userIdTo)
第二个查询将为您提供第二个用户的组。然后,您将此组与第一个用户进行比较。
答案 2 :(得分:1)
这应该做的工作。
SELECT
IF(COUNT(*) > 0,
'yes',
'no') AS AreTheyInSameGroup
FROM
chatUsers t1
WHERE
userID = : userIdFrom AND chatGroup IN(
SELECT
chatGroup
FROM
chatUsers t2
WHERE
userID = : userIdTo
)
这个想法取自@ infinitezero的回答。但我使用IN来搜索组+添加如果为了更好的澄清。