Как я могу проверить, находится ли пользователь 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();
Вы можете использовать такой запрос:
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
из запроса.
Это должно делать работу.
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 для поиска группы + добавил If для лучшего уточнения.
Вы можете сделать это с помощью sub select:
SELECT 1 FROM chatUsers WHERE userID = :userIdFrom AND chatGroup = (SELECT chatGroup FROM chatUsers WHERE userID = :userIdTo)
Второй запрос даст вам группу второго пользователя. Затем вы сравниваете эту группу со своим первым пользователем.