SQL 用两个 orWhere 查询

SQL query with two orWhere

我需要你的帮助。

我无法执行 sql 查询。

我有两个 tables,patients and user,在患者 table 我有字段, name,last name, personal_id, strikesusers table 我有一个名为 status 的字段。我澄清一下,personal_id是公司分配的代码,不同于PK。

在系统逻辑中,用户可以 'disabled' 有两个原因。

1.-管理员把用户状态放在Inactive 2.-用户有3次或以上的罢工。

所以我要执行的查询如下。

给定一个 value,return 我所有匹配 personal_id OR last name 的用户还有什么 用户不活跃 (Either for reasons 1 or 2)

$patients= DB::table('patiens')
    ->join('users','patiens.User_ID','=','users.id')
    ->where('users.status','=','Inactive')
    ->orwhere('patiens.strikes','>=',3)
    ->where('patiens.last_name','like','%'.$date.'%')
    ->orwhere('patiens.personal_id','like','%'.$date.'%')
    ->get();

基本上我需要我的查询来完成这个:

 This...
 ->where('users.status','=','Inactive')
    ->orwhere('patiens.strikes','>=',3)

 AND ALSO 

 ->where('patiens.last_name','like','%'.$date.'%')
 ->orwhere('patiens.personal_id','like','%'.$date.'%')
 

基本上,首先提取 All Inactive 然后在该列表中查找所有匹配项

您可以在回调中嵌套条件:

$patients= DB::table('patiens')
    ->join('users','patiens.User_ID','=','users.id')
    ->where(function ($query) { 
           $query->where('users.status','=','Inactive')
              ->orwhere('patiens.strikes','>=',3);
    })->where(function ($query) use ($date) {
         $query->where('patiens.last_name','like','%'.$date.'%')
           ->orwhere('patiens.personal_id','like','%'.$date.'%');
    })
    ->get();