下面的代码段打印出一个查询,该查询从DOB处于特定年龄范围的数据库中提取用户。在这种情况下,用户年龄在11到12或17和18岁之间。我正在尝试使用CodeIgniter Active Record语法动态创建此查询。
此代码段
$age_count = 0;
foreach( $range as $r )
{
$start_date = strtotime($r[0] . "years ago");
$stop_date = strtotime($r[1] . "years ago");
$range = array('dob <' => $start_date, 'dob >' => $stop_date);
( $age_count == "0" || $age_count%1 ) ? $this->db->where($range) : $this->db->or_where($range);
$age_count++;
}
$users = $this->db->get("users")->result_array();
生成此查询
SELECT * FROM (`users`) WHERE `dob` < 956351611 AND `dob` > 924729211 OR `dob` < 766962811 OR `dob` > 735426811
最后的OR当然应该是AND。我怎样才能做到这一点?归结为知道何时使用or_where()
或仅where()
。我认为通过foreach的每一个奇怪的传递都应该是OR,但我还没有完全存在。
此功能可能只接收一个范围(11-12)或几个范围。
答案 0 :(得分:0)
使用database API,您可以使用多个where()
来获取WHERE … AND …
。
$this->db->where('name', $name);
$this->db->where('title', $title);
$this->db->where('status', $status);
// WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
(与文件相关)