Mysql 如果and子句中没有数据,请选择error

Mysql 如果and子句中没有数据,请选择error,mysql,sql,database,laravel,Mysql,Sql,Database,Laravel,我有一个查询,它获取表单详细信息,如果已经分配给某个用户,则丢弃formid $formIds = DB::table('tbl_staff_user_details') ->select(DB::raw('GROUP_CONCAT(forms_assigned) as form_ids')) ->first(); $formIds = array_unique(explode(",", $formIds->form_ids)); if

我有一个查询,它获取表单详细信息,如果已经分配给某个用户,则丢弃formid

$formIds = DB::table('tbl_staff_user_details')
          ->select(DB::raw('GROUP_CONCAT(forms_assigned) as form_ids'))
          ->first();
$formIds = array_unique(explode(",", $formIds->form_ids));
if (Input::has('form_id'))
{
     $sql = 'SELECT * from tbl_forms where id IN('.Input::get('form_id').')';
}
else
{
     $lm_ids = Input::get('law_id');            
     $sql =  'SELECT *
              FROM tbl_forms
              WHERE lm_id IN('.$lm_ids.') AND id 
              NOT IN('.join(",",$formIds).')';
}
$data = DB::select($sql);
当我执行
dd($formIds)
时,我得到的是

错误如下:

语法错误或访问冲突:1064 在第3行(SQL:从tbl_表单中选择*,其中lm_id位于(1,2,3,4,5)和 id不在()中)

如果
$formIds
为空,如何激发
$sql

如果$formIds为空,如何激发$sql

编辑2:

我不希望
和id不在('.join(“,”,$formIds)。
子句成为
$sql
的一部分,如果
$formIds
null


您可以
过滤
空值:

$formIds = array_unique(explode(",", $formIds->form_ids));

$formIds = array_filter($formIds, function($item){
        return !empty($item);
});
if (Input::has('form_id'))
{
    $sql = 'SELECT * from tbl_forms where id IN('.Input::get('form_id').')';
}
else
{
     $lm_ids = Input::get('law_id');      
     if(!empty($formIds)){      
        $sql =  'SELECT *
          FROM tbl_forms
          WHERE lm_id IN('.$lm_ids.') AND id 
          NOT IN('.join(",",$formIds).')';
     }else{
       $sql =  'SELECT *
          FROM tbl_forms
          WHERE lm_id IN('.$lm_ids.');
     }
}

在生成查询的行中,仅在有意义的情况下添加NOT In子句

$sql = "SELECT *
          FROM tbl_forms
          WHERE lm_id IN('.$lm_ids.')";

if ($formIds != null) {
     $sql .= ' AND id NOT IN('.join(",",$formIds).')';
}

如果$formIds不为null,只需放置一个if块,然后只触发查询。@AnkitBajpai如果$formIds为null,我希望$sql='从tbl_表单中选择*,其中lm_id在('.$lm_id.')中,id不在('.join(“,$formIds)。');如果$formIds为null,将被解雇。您知道在您的示例中,
$sql
永远不会为null吗?而是一个空数组?无论如何,我将更新我的答案并包含更多代码,它显示为未定义变量:在$data=DB::select($sql)行中的sql;您不能指望有人代替您编写代码,但我已经更新了我的答案,现在包含了完整的代码。先生,请指导我,因为我是这方面的新手,我不希望和id不在('.join(“,”,$formIds)。')子句成为$sql的一部分,如果$formIds为null。如果$formIds具有null值,则我不希望和id不在('.join(“,”,$formIds)。')。join(“,”“,$formIds)。”)子句作为$sql的一部分。
$sql = "SELECT *
          FROM tbl_forms
          WHERE lm_id IN('.$lm_ids.')";

if ($formIds != null) {
     $sql .= ' AND id NOT IN('.join(",",$formIds).')';
}