2015-03-13 58 views
2

我試圖在codeigniter中的一系列數據之間加載數據。 我無法得到where語句的權利。我想查詢的語句是:「WHERE OR」在Codeigniter中加載數據範圍中的數據PHP

1-獲取數據,如果"inv_firstdate"
2- $from$to之間,或者如果inv_seconddate$from$to之間

我試圖在代碼查詢, 我需要幫助嗎,有什麼想法?

$from = "20150309"; 
$to = "2015410"; 

$query = $this->db->select('*'); 
$query = $this->db->from('inv'); 
$query = $this->db->join('users', 'users.hu_id = inv.usr_id'); 
$query = $this->db->order_by('inv_id', 'desc'); 

$query = $this->db->where('hu_sponsor', $id); 
$query = $this->db->where('pln_duration', 30); 
$query = $this->db->where('inv_status', 1); 

$query = $this->db->where('inv_firstdate >=', $from); 
$query = $this->db->where('inv_firstdate <=', $to); 
$query = $this->db->or_where('inv_seconddate >=', $to); 
$query = $this->db->or_where('inv_seconddate <=', $from); 
+0

爲什麼你將每行分配給$ query? – 2015-03-13 14:02:06

+0

你對此有何建議? – 2015-03-13 15:26:18

回答

1

你不能這樣做whereor_where條件在一起。 or_where只能使用其中只有或查詢need.You可以用它來解決你的問題

$this->db->select('*'); 
    $this->db->from('inv'); 
    $this->db->join('users', 'users.hu_id = inv.usr_id'); 
    $this->db->order_by('inv_id', 'desc'); 

    $this->db->where('hu_sponsor', $id); 
    $this->db->where('pln_duration', 30); 
    $this->db->where('inv_status', 1); 

    $this->db->where('((inv_firstdate >='. $from.' AND inv_firstdate <= '.$to.') OR (inv_seconddate <='. $to.' AND inv_seconddate >= '.$from.'))'); 
    $results=$this->db->get()->result(); 
+0

非常感謝。這太有幫助了。 – 2015-03-13 14:13:59

0

你可以這樣做:

$query = $this->db->where('((inv_firstdate >= ', $from, FALSE); 
$query = $this->db->where('inv_firstdate <= ' . $to . ')', NULL, FALSE); 
$query = $this->db->or_where('(inv_seconddate >= ', $to, FALSE); 
$query = $this->db->where('inv_seconddate <= '. $from . '))', NULL, FALSE); 

或者這樣:

$query = $this->db->where('((inv_firstdate >= ' . $from . ' AND inv_firstdate <= ' . $to . ') OR (inv_seconddate >= ' . $to . ' AND inv_seconddate <= ' . $from . '))'); 
+0

感謝您的回覆,但是,synax是正確的,但它不會執行OR_WHERE。 – 2015-03-13 13:34:18

0

在db不知道你的日期格式,但無論何時您的疑問在我的經驗,你寫更多變得複雜代碼使用ci活動記錄而不是純SQL,從而破壞了它的重點。只需使用$this->db->query(""),以您的各種條件建立舊式的方式。你可以節省大概60%的費用,它會更具可讀性並且實際上可以工作。參考日期格式在mysql TIMESTAMP()中包裝您的字符串以確保它們正在被正確解析。