Вы можете использовать подзапрос
, как показать все элементы, у которых нет строк, соответствующих 'group_id'
$group_id= $_GET['group_id'];
$q = "SELECT * FROM MEMBERS WHERE MEMBERS.id NOT IN(
SELECT member_id FROM GROUP_MEMBERS WHERE group_id='$group_id'
);";
Объяснение
SELECT member_id FROM GROUP_MEMBERS WHERE group_id='$grID'
это позволит получить всех членов этой группы по заданному идентификатору, а затем вы выберете всех участников, которых нет среди них.
SELECT * FROM MEMBERS WHERE MEMBERS.id NOT IN()
этот дастДанные членов, за исключением идентификаторов внутри скобок, подзапрос получит идентификаторы членов в данной группе, нет необходимости присоединяться к трем таблицам, так как вы используете идентификатор группы, существующей в GROUP_MEMBERS, и связываете GROUP и MEMBERS
примечание на одну сторону
если у вас есть имя группы и то, что всем пользователям, не входящим в эту группу, вам нужно будет использовать таблицу ГРУПП
SELECT * FROM MEMBERS WHERE MEMBERS.id NOT IN(
SELECT member_id FROM GROUP_MEMBERS WHERE group_id = (
SELECT id from GROUPS WHERE name = '$Group_Name'
)
);
, вы можетеиспользовать WHERE group_id IN (...)
это будет работать так же
Это демонстрация, я создал ту же базу данных с теми же данными и протестировал запросы
+----+-------+-------+---------+
| id | first | last | role_id |
+----+-------+-------+---------+
| 1 | Jack | Jones | 1 |
| 2 | Jane | Doe | 2 |
| 3 | Bob | Bee | 2 |
| 4 | Jen | Nee | 2 |
+----+-------+-------+---------+
+----+--------+
| id | name |
+----+--------+
| 1 | group1 |
| 2 | group2 |
+----+--------+
+----+----------+-----------+
| id | group_id | member_id |
+----+----------+-----------+
| 1 | 1 | 1 |
| 2 | 1 | 4 |
+----+----------+-----------+
Я запускаю подзапрос, как указано выше, ирезультаты, как и ожидалось,
MariaDB []> select * from members where id not in
(select member_id from group_members where group_id = 1);
+----+-------+------+---------+
| id | first | last | role_id |
+----+-------+------+---------+
| 2 | Jane | Doe | 2 |
| 3 | Bob | Bee | 2 |
+----+-------+------+---------+
похоже, когда у вас есть имя группы
MariaDB []> select * from members where id not in
(select member_id from group_members where group_id =
(select id from groups where name='group1'));
+----+-------+------+---------+
| id | first | last | role_id |
+----+-------+------+---------+
| 2 | Jane | Doe | 2 |
| 3 | Bob | Bee | 2 |
+----+-------+------+---------+