Mysql Проверьте, находится ли пользователь уже в одной группе с другим пользователем

0

Как я могу проверить, находится ли пользователь 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();
  • 1
    Я бы порекомендовал изменить имя столбца, так как это может привести к путанице и множеству мелких ошибок в процессе разработки. Если вы этого не сделаете, просто поместите это вокруг: `group`
Теги:

3 ответа

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 из запроса.

  • 0
    вау, большое спасибо!
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 для поиска группы + добавил If для лучшего уточнения.

1

Вы можете сделать это с помощью sub select:

SELECT 1 FROM chatUsers WHERE userID = :userIdFrom AND chatGroup = (SELECT chatGroup FROM chatUsers WHERE userID = :userIdTo)

Второй запрос даст вам группу второго пользователя. Затем вы сравниваете эту группу со своим первым пользователем.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню