2017-01-08 79 views
2

我使用笨的框架,我想創建一個或使用foreach循環WHERE語句,添加或者在笨語句中使用foreach循環

下面是我的代碼,

$wh_q = array('ec_date >' => $start, 'ec_date <=' => $end); 

這將產生查詢as WHERE ec_details.date > '2016-11-01 00:00:00' AND ec_details.date <= '2017-01-07 00:00:00'

現在我想在AND OFF ec_details的abover查詢字符串中追加幾個條件。 user_id = '5' 或ec_detailsuser_id ='6'等。

現在USER_ID,5和6是從陣列結果進入,

$user_string = '5,6'; 
$users_array = explode(",",$user_string); 

foreach ($users_array as $user) { 
    $query = array('ec_details.user_id' => $user); 
} 

那麼我在原始$wh_q陣列合併上述$query陣列

$wh_q = array_merge($wh_q, $query); 

最後我選取如下,

$this->db->where($wh_q); 

但我的要求,這將不會產生查詢,但只會像下面那樣創建,

`WHERE `ec_details`.`date` > '2016-11-01 00:00:00' AND `ec_details`.`date` <= '2017-01-07 00:00:00'`AND `ec_details`.`user_id` = '6'` 

如何在codeigniter中使用foreach循環添加AND OR WHERE語句?

謝謝

+0

我假設你想獲得詳細信息從ec_detail表中爲user_id 5和6之間的開始和結束範圍,是嗎? –

+0

@MalikMudassar,是糾正 – rjcode

+0

看到編輯答案...如果作品接受感謝... –

回答

1

嘗試如下...

$wh_q = array('ec_date >' => $start, 'ec_date <=' => $end);//condition first 

$user_string = '5,6'; 
$users_array = explode(",",$user_string); 

foreach ($users_array as $user) { 
    $query []= array('ec_details.user_id' => $user);//second condition 
} 

//print_r($query) //multidimensional array 

查詢

$this->db->where($wh_q); 

$total = count($query); 
for($i=0;$i<$total;$i++){ 
    $this->db->or_where($query[$i]); 
    } 
+0

但是這不會增加值5,它只會產生 - 或'ec_expensedetails'.'user_id' =「6」,在那裏,因爲我需要 - 和'ec_expensedetails'.'user_id' =「5」或'ec_expensedetails' 'user_id'='6' – rjcode

+0

如果我們使用$ query。= array('ec_details.user_id'=> $ user); 不,這將創造2 OR陳述 –

+0

@Hikmat,是相同的密鑰在陣列允許嗎?不,這不對。我想我們只能用自定義字符串實現.. – rjcode

1

你可以嘗試這樣的, 創建一個完整的地方像這樣

$where = "name='Joe' AND status='boss' OR status='active'"; 
$this->db->where($where); 

並檢查字符串,這將工作。

編輯

或者你可以給予或條件類似這樣

$this->db->where('name !=', $name); 
$this->db->or_where('id >', $id); // Produces: WHERE name != 'Joe' OR id > 50 
+0

@V怪客,這可以工作,如果我們這樣做的字符串,但我們需要從陣列中提取值並創造條件語句。 – rjcode

0

如果您需要在檢查用戶編號,然後你可以更好的用戶也像下面。

$user_string = '5,6'; $users_array = explode(",",$user_string); 
$this->db->where_in('id', $users_array); 

,如果你只想使用或和與聲明

然後在下面的代碼中使用

$this->db->where('ec_date >',$start,false); 
$this->db->where('ec_date <=', $end,false); 
$user_string = '5,6'; 
$users_array = explode(",",$user_string); 
$userqry = array(); 
foreach ($users_array as $user) { 
    $userqry[] = "ec_details.user_id ='".$user."'"; 
} 
$userqrystr = implode(" OR ", $userqry); 
$this->db->where($userqrystr,false,false); 

這種查詢的樣子

WHERE `ec_details`.`date` > '2016-11-01 00:00:00' AND `ec_details`.`date` <= '2017-01-07 00:00:00' AND (`ec_details`.`user_id` = '6' OR `ec_details`.`user_id` = '5')