2011-04-21 120 views
0

下面的代碼片段打印出一個查詢,該查詢從DOB處於特定年齡範圍的DB獲取用戶。在這種情況下,用戶可能介於11到12或17和18歲之間。我試圖在CodeIgniter Active Record語法中動態創建這個查詢。動態創建WHERE語句

這個片段

$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_where()或簡單地where()。我認爲每一個傳奇都應該是一個OR,但我還沒有完成。

此功能可能只接收一個範圍(11-12)或幾個。

+0

我不熟悉codeignitor,而是使用如何[之間](http://codeigniter.com/forums/viewthread/100048/#508591) ? – 2011-04-21 21:31:06

+0

我總是可以使用一個「正常」的查詢語法應該沒有解決方案... – stef 2011-04-21 21:36:22

+0

其實我會有同樣的問題,當編寫WHERE dob之間x和y或dob之間a和B – stef 2011-04-21 21:37:58

回答

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' 

(從文檔並列)

+0

任何解釋爲什麼-1,什麼似乎是一個有效的解決方案? – Aif 2011-04-23 12:11:57