Во-первых, извините, если это почти достаточно дубликат. Я нашел этот вопрос , который почти делает то, что я хочу, но я не мог понять, как изменить его в соответствии с моими потребностями.
У меня есть эти 3 таблицы:
cs_Accounts:
+----+-----------------------------+-------------+
| id | email | username |
+----+-----------------------------+-------------+
| 63 | jamasawaffles@googlil.com | jamwaffles2 |
| 64 | jamwghghhfles@goomail.com | jamwaffles3 |
| 65 | dhenddfggdfgetal-pipdfg.com | dhendu9411 |
| 60 | jwapldfgddfgfffles.co.uk | jamwaffles |
+----+-----------------------------+-------------+
cs_Groups:
+----+-----------+------------+-------------+
| id | low_limit | high_limit | name |
+----+-----------+------------+-------------+
| 1 | 0 | 0 | admin |
| 2 | 1 | 50 | developer |
| 3 | 76 | 100 | reviewer |
| 4 | 51 | 75 | beta tester |
| 5 | 1 | 50 | contributor |
+----+-----------+------------+-------------+
cs_Permissions:
+----+---------+----------+
| id | user_id | group_id |
+----+---------+----------+
| 4 | 60 | 4 |
| 3 | 60 | 1 |
| 5 | 60 | 2 |
| 6 | 62 | 1 |
| 7 | 62 | 3 |
+----+---------+----------+
Я боролся с трехсторонним объединением уже несколько часов, и я не могу получить желаемые результаты. Я ищу это поведение: строка будет возвращена для каждого пользователя из cs_Accounts
, где в cs_Permissions
есть строка, содержащая их идентификатор и идентификатор группы из cs_Groups
, а также группу с group_id
имеет high_lmiit
и low_limit
в диапазоне, который я могу указать.
Используя данные в таблицах выше, мы можем получить что-то вроде этого:
email username cs_Groups.name
----------------------------------------------------------
jwapldfgddfgfffles.co.uk jamwaffles admin
jwapldfgddfgfffles.co.uk jamwaffles developer
jwapldfgddfgfffles.co.uk jamwaffles beta tester
dhenddfggdfgetal-pipdfg.com dhendu9411 admin
dhenddfggdfgetal-pipdfg.com dhendu9411 reviewer
Однако есть дополнительное условие. Это условие, когда строки выбираются только в том случае, если группа, к которой принадлежит пользователь, имеет high_limit
и low_limit
со значениями, которые можно указать с помощью предложения WHERE
. Как видите, таблица выше содержит только пользователей со строками в таблице разрешений.