簡體   English   中英

SQL Codeigniter中的where條件

[英]SQL where condition in Codeigniter

我想檢查預訂是否存在。 我有入住日期,退房日期和房間號。 我在下面的查詢中嘗試過,但它也提供了不是該房間ID的所有數據。 我究竟做錯了什么?

$array = array('checkin_date' => $checkin, 'checkout_date' => $checkin);
$array1 = array('checkin_date >' => $checkin, 'checkout_date <' => $checkin);
$array2 = array('checkin_date <' => $checkin, 'checkout_date >' => $checkin);
$array3 = array('checkin_date <' => $checkin, 'checkout_date <' => $checkin);
$array4 = array('checkin_date >=' => $checkin, 'checkout_date <=' => $checkin);
$array5 = array('checkin_date >=' => $checkout, 'checkout_date <=' => $checkout);

$this->db->select('*');
$this->db->from('igc_room_booking');
$this->db->where('delete_status', 0);
$this->db->where('cancel_status', 0);
$this->db->where('room_id', $val->room_id);
$this->db->where($array);
$this->db->or_where($array2);
$this->db->or_where($array3);
$this->db->or_where($array);
$this->db->or_where($array4);
$this->db->or_where($array5);
$bookingss = $this->db->get()->result();

現在,我在這里沒有在考慮您的邏輯-因為Simos Fasouliotis在評論中說的足夠多-因此您在這里以句法的方式得到了一個正確的主意...

但是,如果使用get_compiled_select編譯查詢, get_compiled_select得到以下結果:

SELECT *
FROM `igc_room_booking`
WHERE `delete_status` =0
AND `cancel_status` =0
AND `room_id` = 12
AND `checkin_date` = '2010-09-01'
AND `checkout_date` = '2010-09-01'
OR `checkin_date` < '2010-09-01'
OR `checkout_date` > '2010-09-01'
OR `checkin_date` < '2010-09-01'
OR `checkout_date` < '2010-09-01'
OR `checkin_date` = '2010-09-01'
OR `checkout_date` = '2010-09-01'
OR `checkin_date` >= '2010-09-01'
OR `checkout_date` <= '2010-09-01'
OR `checkin_date` >= '2010-10-01'
OR `checkout_date` <= '2010-10-01'

到現在為止,您應該能夠了解問題所在了...

一個可能的解決方案可能是

$bookingss = $this->db
    ->select('*')
    ->from('igc_room_booking')
    ->where('delete_status', 0)
    ->where('cancel_status', 0)
    ->where('room_id', $val->room_id)
    ->group_start()
        ->or_where($array)
        ->or_where($array2)
        ->or_where($array3)
        ->or_where($array4)
        ->or_where($array5)
    ->group_end()
    ->get()
    ->result();

但是恕我直言,這沒有任何意義,您應該明確考慮所需的日期范圍...

嘗試這個:

$array = "('$checkindate' BETWEEN `checkin_date` AND `checkout_date`) OR  ('$checkoutdate' BETWEEN `checkin_date` AND `checkout_date`) OR (`checkin_date` > '$checkindate' AND `checkout_date` < '$checkoutdate')";
    $this->db->select('*');
    $this->db->from('igc_room_booking');
    $this->db->where('delete_status', 0);
    $this->db->where('cancel_status', 0);
    $this->db->where('room_id', $val->room_id);
    $this->db->where($array);
    $bookingss = $this->db->get()->result();

我認為問題是您的查詢有誤...。您應該刪除

$ this-> db-> select(*)和$ this-> db-> from('igc_room_booking')


而在所有您的where子句之后,您應該擁有

$ this-> db-> get('igc_room_booking');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM