0

我的桌子

在此处输入图像描述

这是我的表,我必须使用多个 where 条件显示数据。首先我选择使用 dms_expire_date,为此我得到了答案,我在 where 条件下使用 dms_doc_name 但我没有得到正确的结果。

到目前为止我已经很累了。

在此处输入图像描述]

如果我在“where”中使用“或”,请查看这张图片

看这张照片在此处输入图像描述

我不知道该怎么做。请帮助解决这个问题。

SELECT * FROM `dms_document` WHERE dms_expire_date BETWEEN '2020-05-01' AND '2020-07-16' AND dms_doc_name = '' OR dms_category_id = '' OR dms_subcategory_id=''

我也厌倦了阵列,但我没有结果。

$this->db->select('*');
$this->db->join('dms_category as C', 'C.dms_category_id = D.dms_category_id', 'left outer');
$this->db->join('dms_sub_category as S', 'S.dms_subcategory_id = D.dms_subcategory_id', 'left outer');
$this->db->where('dms_expire_date >=', $newstart);
$this->db->where('dms_expire_date <=', $newend);
$this->db->where(array('dms_doc_name' =>$docname,'D.dms_category_id'=>$category,'D.dms_subcategory_id'=>$subcategory));
$data['documents']= $this->db->get('dms_document as D')->result_array();
4

2 回答 2

0

OR您可以使用 CodeIgniter 的or_where()( v3 docs ) 或orWhere()( v4 docs )编写。

//your initial query
$sql = "SELECT
            *
        FROM
            `dms_document`
        WHERE
            dms_expire_date BETWEEN '2020-05-01' AND '2020-07-16'
            AND dms_doc_name = ''
            OR dms_category_id = ''
            OR dms_subcategory_id=''";

//building the same query using CI
$this->db->select('*');
$this->db->from('dms_document');
$this->db->where('dms_expire_date >=', '2020-05-01');
$this->db->where('dms_expire_date <=', '2020-07-16');
$this->db->where('dms_doc_name', '');
$this->db->or_where('dms_category_id', '');
$this->db->or_where('dms_subcategory_id', '');

$this->db->_compile_select();您可以通过运行或$this->db->last_query();https://stackoverflow.com/a/6145021/1499877供参考)来确认生成的查询。

echo '<pre>';
var_dump($sql);
var_dump($this->db->_compile_select());
echo '</pre>';
die();
于 2020-07-16T04:06:30.760 回答
0

尝试

SELECT * 
FROM dms_document
WHERE dms_expire_date BETWEEN $newstart AND $newend
AND CASE WHEN $docname IS NULL THEN 1 = 1 ELSE dms_doc_name = $docname END
AND CASE WHEN $category IS NULL THEN 1 = 1 ELSE dms_category_id = $category END 
AND CASE WHEN $subcategory IS NULL THEN 1 = 1 ELSE dms_subcategory_id = $subcategory END 

--

编辑。等待清关。

如果我正确理解了您的意思,那么理解 AND、OR 和括号 () 的优先级是有问题的

-- 如果有人想使用小提琴,我已经为此问题创建了示例数据

于 2020-07-16T03:32:46.617 回答