Я использовал интервал MySQL в своем запросе. В запросе типа raw он работает нормально, но в стиле PHP также были возвращены некоторые неправильные данные. Я обнаружил, что проблема возникла из-за интервала, в котором. Я много пробовал, но это не может решить.
Номер 1 - мой необработанный запрос (работает нормально),
Номер 2 - мой код CodeIgniter,
Номер 3 - мой фактический запрос кода CodeIgniter,
NO:1 SELECT str_to_date(concat(yearweek(s.creationdate), 'tuesday'), '%X%V %W') as week, `b`.`name` as `branchname`, `g`.`name` as `groupname`, `s`.`streetName`, DATE(s.creationdate) as start_date, DATE(s.maturity_date) as maturity_date, (DATE(s.maturity_date) + INTERVAL 4 WEEK) as nippu_date, `customerName`, `s`.`balance` FROM `super_sales` `s` LEFT JOIN `branch` `b` ON `s`.`branchID`=`b`.`id` LEFT JOIN `group` `g` ON `s`.`groupID`=`g`.`id` LEFT JOIN `super_customer` `c` ON `c`.`customerid`=`s`.`customerid` WHERE DATE(c.lastAttendance) > (DATE(s.maturity_date) + INTERVAL 4 WEEK) AND `c`.`balance` <>0 ORDER BY `week` DESC LIMIT 50
NO 2: $this->db->select("str_to_date(concat(yearweek(s.creationdate), 'tuesday'), '%X%V %W') as week,b.name as branchname,g.name as groupname,s.streetName,DATE(s.creationdate) as start_date,DATE(s.maturity_date) as maturity_date,(DATE(s.maturity_date) + INTERVAL 4 WEEK) as nippu_date,customerName,s.balance");
if($parameters['branch']!=NULL){
$this->db->like('s.branchID',$parameters['branch']);
}
// $dat = array('e_date' => ;
// $dat=DATE_ADD(DATE(s.maturity_date) + INTERVAL 4 DAY);
$this->db->where('DATE(c.lastAttendance) >','(DATE(s.maturity_date) + INTERVAL 4 WEEK)');
$this->db->where('c.balance <>',0);
if($parameters['cdatefrom']!=NULL){
$this->db->where('yearweek(s.creationdate)',date('YW',strtotime($parameters['cdatefrom'])));
}
// $this->db->group_by(array("s.branchID", "str_to_date(concat(yearweek(s.creationdate), 'tuesday'), '%X%V %W')"));
if(empty($order_column) || empty($order_type)){
$this->db->order_by('yearweek(s.creationdate)','asc');
}else{
$this->db->order_by($order_column,$order_type);
}
if($limit!=0){
$this->db->limit($limit,$offset);
}
$this->db->join('branch b','s.branchID=b.id ','left');
$this->db->join('group g','s.groupID=g.id ','left');
$this->db->join('super_customer c','c.customerid=s.customerid ','left');
$query = $this->db->get('super_sales s');
echo $this->db->last_query();
if($query->num_rows()>0){
return $query->result_array();
}else{
return FALSE;
}
NO:3 SELECT str_to_date(concat(yearweek(s.creationdate), 'tuesday'), '%X%V %W') as week, `b`.`name` as `branchname`, `g`.`name` as `groupname`, `s`.`streetName`, DATE(s.creationdate) as start_date, DATE(s.maturity_date) as maturity_date, (DATE(s.maturity_date) + INTERVAL 4 WEEK) as nippu_date, `customerName`, `s`.`balance` FROM `super_sales` `s` LEFT JOIN `branch` `b` ON `s`.`branchID`=`b`.`id` LEFT JOIN `group` `g` ON `s`.`groupID`=`g`.`id` LEFT JOIN `super_customer` `c` ON `c`.`customerid`=`s`.`customerid` WHERE DATE(c.lastAttendance) > '(DATE(s.maturity_date) + INTERVAL 4 WEEK)' AND `c`.`balance` <>0 ORDER BY `week` DESC LIMIT 50
Я обнаружил проблему со сравнением двух запросов, если я удалил верхние одинарные кавычки, охватываемые (DATE (s.maturity_date) + INTERVAL 4 WEEK), но он не работает?