Как выбрать всех пользователей, которые не являются пользователями и не разделяют одну и ту же роль? - PullRequest
0 голосов
/ 18 марта 2019

Работал часами и, похоже, не смог правильно ответить на запрос.

Есть две роли (учителя и ученики). Я хочу, чтобы он выбрал все user_id и роль всех пользователей, которые еще не являются друзьями и имеют противоположную роль данного пользователя.

Это то, что я имею до сих пор. Я пытался экспериментировать с левым и правым объединениями, но обнаружил, что получаю неожиданные результаты.

Любая помощь очень ценится.

select distinct(opposites.id) new_friend, role
               from (
                      select user_id
                      from users
                      right join relationships
                      on
                      relationships.user_id = ?
                    ) strangers
               inner join
                    (
                      select * from users
                      where role != (
                                      select role from users where users.id = ?
                                    )
                    ) as opposites;

Ниже приведена структура таблицы отношений.

+-----------+---------+------+-----+---------+-------+
| Field     | Type    | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| user_id   | int(11) | NO   | PRI | NULL    |       |
| friend_id | int(11) | NO   | PRI | NULL    |       |
+-----------+---------+------+-----+---------+-------+

Таблица пользователей имеет атрибут id, который является ее первичным ключом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...