Работал часами и, похоже, не смог правильно ответить на запрос.
Есть две роли (учителя и ученики). Я хочу, чтобы он выбрал все 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, который является ее первичным ключом.