У меня есть таблица в MySQL, содержащая group_name
и username
, например:
ID|group_name|username
----------------------
1 | A | user1
----------------------
2 | B | user2
----------------------
3 | C | user1
...
И у меня есть логическое выражение, которое выглядит так:
(A & B) || C
Это означает, что если я выполняю поиск по какому-либо пользователю, этот пользователь должен быть в обеих группах A и B или в C.
Я должен проверять пользователей с помощью пользовательских выражений в Laravel, и мой запрос будетвыглядит так:
return DB::table('assigned_groups')->where($expression)->where('username', $username)->count();
Где $expression
- мое логическое выражение, написанное на необработанном SQL, я полагаю.И я должен проверить, можно ли найти хотя бы один раз $username
, назначенный нужным группам.
Пока у меня просто есть фрагмент псевдокода для выражения $ вроде:
select count(*)
having (
(count(select(*) where group_name = A) > 0
and count(select(*) where group_name = B) > 0)
or count(select(*) where group_name = C) > 0
)
Как мне правильно написать это выражение? Как мне изменить мой запрос Laravel и $expression
сам по себе?
UPD: теперь мой SQL выглядит так, и это почти что-то
SELECT count(*) FROM `assigned_groups`
where username = 'user1'
having (
(count(case group_name when 'A' then 1 else null end) > 0
and count(case group_name when 'B' then 1 else null end) > 0)
or count(case group_name when 'C' then 1 else null end) > 0
)