动态创建WHERE语句

时间:2011-04-21 21:19:10

标签: php codeigniter

下面的代码段打印出一个查询,该查询从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)或几个范围。

1 个答案:

答案 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'

(与文件相关)