【发布时间】:2018-10-24 04:52:46
【问题描述】:
我在 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 至少分配给需要的组一次。
现在我只有一段 $expression 的伪代码,如下所示:
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
)
【问题讨论】:
-
如果在 laravel 中实现 sql 表达式时遇到问题,您可以随时使用 DB::select。看这里:laravel.com/docs/5.0/database
标签: mysql sql laravel laravel-5.2 logic