2017-06-13 13 views
0

私は、2つの範囲間でデータを取得したい場所のユーザーの休暇レポートを取得しようとしています。また、葉の日付が選択した範囲にある場合もあります。 例 ここに私のデータベース enter image description here 2017-06-13から2017-06-17までの範囲を選択し、2番目の行を選択し、2017-06-21から2017-06-21までの範囲を選択したとします。 25は、その後も、私は同じ結果をADVにおいて2つの範囲の間でデータベースからデータを取得しましたか?

(A)

(SELECT u.user_id, u.user_image, u.user_first_name, u.user_last_name, CONCAT(u.user_first_name, ' ', u.user_last_name) AS user_name, 
     u.user_email, p.driver_number, l.status, DATE_FORMAT(l.from_date, '%d-%m-%Y') as from_date, DATE_FORMAT(l.to_date, '%d-%m-%Y') as to_date 
     FROM (`bat_usermst` u) 
     JOIN `bat_leavemst` l ON `u`.`user_id` = `l`.`user_id` 
     JOIN `bat_profilemst` p ON `u`.`user_id` = `p`.`user_id` 
     WHERE `l`.`from_date` >= '" . $start . "' AND `l`.`from_date` <= '" . $end . "' AND 
     `l`.`status` = '1' AND `u`.`user_type` = 5 AND `u`.`user_status` = '1' AND `u`.`is_deleted` = '0' 
     ORDER BY `user_name`) 

     UNION 

     (SELECT u.user_id, u.user_image, u.user_first_name, u.user_last_name, CONCAT(u.user_first_name, ' ', u.user_last_name) AS user_name, 
     u.user_email, p.driver_number, l.status, DATE_FORMAT(l.from_date, '%d-%m-%Y') as from_date, DATE_FORMAT(l.to_date, '%d-%m-%Y') as to_date 
     FROM (`bat_usermst` u) 
     JOIN `bat_leavemst` l ON `u`.`user_id` = `l`.`user_id` 
     JOIN `bat_profilemst` p ON `u`.`user_id` = `p`.`user_id` 
     WHERE `l`.`to_date` >= '" . $start . "' AND `l`.`to_date` <= '" . $end . "' AND 
     `l`.`status` = '1' AND `u`.`user_type` = 5 AND `u`.`user_status` = '1' AND `u`.`is_deleted` = '0' 
     ORDER BY `user_name`) 
     "; 

(B)

$this->db->select("u.user_id, u.user_image, u.user_first_name, u.user_last_name, CONCAT(u.user_first_name,' ', u.user_last_name) AS user_name,u.user_email, p.driver_number,l.status, 
     DATE_FORMAT(l.from_date, '%d-%m-%Y') as from_date, 
     DATE_FORMAT(l.to_date, '%d-%m-%Y') as to_date", FALSE); 

     $this->db->from('usermst u'); 
     $this->db->join('bat_leavemst l', 'u.user_id = l.user_id'); 
     $this->db->join('profilemst p', 'u.user_id = p.user_id'); 
     $this->db->where('l.from_date >=', "$start"); 
     $this->db->where('l.to_date <=', "$end"); 
     $this->db->where('l.status', '1'); 
     $this->db->where(array('u.user_type' => DRIVER, 'u.user_status' => '1', 'u.is_deleted' => '0')); 

     $this->db->order_by('user_name'); 
     $result = $this->db->get(); 

おかげを取得するために、2つの異なるクエリの下にしようとしている選択されなければなりませんance。

+0

自分を支持を行うと、(a)に示すサンプルクエリの用語とあなたが取得し、(b)は、テキストベースのテーブルで画像を交換したい行が、私たちはそれを読むことができることにより、あなたの質問を明確にしてください。それはあなたの英語かもしれませんが、私はあなたの質問が何をしたいのか分かりません。 – alexis

+0

あなたは組合をやったのですか?あなたは単純な 'OR'条件でそれを行うことができます。 – jagad89

答えて

0

私があなたのユニオンクエリを見ることができるように、クエリのどこに違いがあるかだけです。 一般的に、複雑なwhere条件がある場合は、単純にMySQLで記述する条件を指定することができます。下のコードは、望ましい結果をもたらすはずです。

$where = "((`l`.`from_date` >= '" . $start . "' AND `l`.`from_date` <= '" . $end . "') ". 
     "OR (`l`.`to_date` >= '" . $start . "' AND `l`.`to_date` <= '" . $end . "')) ". 
      "AND `l`.`status` = '1' AND `u`.`user_type` = 5 AND `u`.`user_status` = '1' AND `u`.`is_deleted` = '0'"; 
     $this->db->from('usermst u'); 
     $this->db->join('bat_leavemst l', 'u.user_id = l.user_id'); 
     $this->db->join('profilemst p', 'u.user_id = p.user_id'); 
     $this->db->where($where,NULL,FALSE); 
     $this->db->order_by('user_name'); 
     $result = $this->db->get(); 
関連する問題