首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用codeigniter选择多个where条件?

如何使用codeigniter选择多个where条件?
EN

Stack Overflow用户
提问于 2020-07-16 11:08:43
回答 2查看 73关注 0票数 0

我的桌子

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

到目前为止我已经累了。

]

如果我使用"or“in "where”I got not in this date.but if I use "and“in”where I not got result for dms_expiry_date“可以看到这张图片

请看这张图片

我不知道如何做this.please帮助来解决这个问题。

代码语言:javascript
复制
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=''

我也在数组中累了,但我没有结果。

代码语言:javascript
复制
$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();
EN

回答 2

Stack Overflow用户

发布于 2020-07-16 11:32:47

试一试

代码语言:javascript
复制
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和括号()的优先级有问题。

--如果有人想使用fiddle,我已经为这个问题创建了示例数据

票数 0
EN

Stack Overflow用户

发布于 2020-07-16 12:06:31

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

代码语言:javascript
复制
//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)来确认生成的查询。

代码语言:javascript
复制
echo '<pre>';
var_dump($sql);
var_dump($this->db->_compile_select());
echo '</pre>';
die();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62926797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档