我想在我的模型中指定一个查询
$this->db
->select('*')
->from('library')
->where('library.rating >=', $form['slider'])
->where('library.votes >=', '1000')
->where('library.language !=', 'German')
->where('library.available_until >=', date("Y-m-d H:i:s"))
->or_where('library.available_until =', "00-00-00 00:00:00")
->where('library.release_year >=', $year_start)
->where('library.release_year <=', $year_end)
->join('rating_repo', 'library.id = rating_repo.id')
所以,我遇到的麻烦是我的or_where
。我希望or
只限于available_until
域。目前,然而,我得到的结果有德语这不是我想要的语言。我如何限制我的or_where
过滤器仅available_until
字段?
您可以只修改这两行:
->where('(library.available_until >=', date("Y-m-d H:i:s"), FALSE)
->or_where("library.available_until = '00-00-00 00:00:00')", NULL, FALSE)
编辑:省略FALSE
参数会在括号前放置反引号,使它们成为表名/值的一部分,使查询无法使用。
NULL
参数在那里只是因为函数要求第二个参数是一个值,因为我们没有一个,我们发送NULL
您可以对库进行分组。available_until where区域由分组方法Codeigniter for而不禁用转义where子句。
$this->db
->select('*')
->from('library')
->where('library.rating >=', $form['slider'])
->where('library.votes >=', '1000')
->where('library.language !=', 'German')
->group_start() //this will start grouping
->where('library.available_until >=', date("Y-m-d H:i:s"))
->or_where('library.available_until =', "00-00-00 00:00:00")
->group_end() //this will end grouping
->where('library.release_year >=', $year_start)
->where('library.release_year <=', $year_end)
->join('rating_repo', 'library.id = rating_repo.id')
参考:https://www.codeigniter.com/userguide3/database/query_builder.html query-grouping
你可以这样修改你的代码:
$where_au = "(library.available_until >= '{date('Y-m-d H:i:s)}' OR library.available_until = '00-00-00 00:00:00')";
$this->db
->select('*')
->from('library')
->where('library.rating >=', $form['slider'])
->where('library.votes >=', '1000')
->where('library.language !=', 'German')
->where($where_au)
->where('library.release_year >=', $year_start)
->where('library.release_year <=', $year_end)
->join('rating_repo', 'library.id = rating_repo.id');
提示:要查看生成的查询,可以使用
echo $this->db->last_query(); die();
你可以使用:查询分组允许您通过将WHERE子句括在括号中来创建组。这将允许您创建带有复杂WHERE子句的查询。支持嵌套组。例子:
$this->db->select('*')->from('my_table')
->group_start()
->where('a', 'a')
->or_group_start()
->where('b', 'b')
->where('c', 'c')
->group_end()
->group_end()
->where('d', 'd')
->get();
https://www.codeigniter.com/userguide3/database/query_builder.html query-grouping
$this->db->where('(a = 1 or a = 2)');