Mysql 如果and子句中没有数据,请选择error
我有一个查询,它获取表单详细信息,如果已经分配给某个用户,则丢弃formidMysql 如果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
$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).')';
}