我有一个表,其中有一个开始日期和结束日期,这些行按唯一ID分组,例如行ID 4,5有group_identify_id 5700045,行ID 1,2,3有group_identify_id 5700044.我只需要选择组中所有行的起始列均大于当前日期的那些组。例如。如果当前日期是15,则不应在结果中显示5700045。
id start end group_identify_id
1 2019-07-18 07:15:00 2019-07-18 08:15:00 5700044
2 2019-07-16 07:15:00 2019-07-16 08:15:00 5700044
3 2019-07-17 07:15:00 2019-07-17 08:15:00 5700044
4 2019-07-15 07:15:00 2019-07-15 08:15:00 5700045
5 2019-07-14 07:15:00 2019-07-14 08:15:00 5700045
结果应该是这样的:
结果:
1 2019-07-18 07:15:00 2019-07-18 08:15:00 5700044
2 2019-07-16 07:15:00 2019-07-16 08:15:00 5700044
3 2019-07-17 07:15:00 2019-07-17 08:15:00 5700044
我正在尝试这样的事情:
$results = $this->db->where('where('DATE(start) >=',$currentDate)->get('schedule_diary')->result();
但它匹配整个行而不是行组。
答案 0 :(得分:1)
下面是原始查询,它将为您提供所需的结果。
SELECT * FROM schedule_diary WHERE group_identify_id NON IN ( SELECT group_identify_id FROM schedule_diary WHERE start <= $currentDate) );
您需要将此查询转换为CodeIgniter Framework,或者也可以使用$ this-> db-> query('RawQueryHere')
答案 1 :(得分:1)
更新 如果在group_identify_id 中具有空值,则可以使用类似的测试:
/*Firstly, you should to select a set of rows whiches not in date*/
$this->db->where('t1.group_identify_id = schedule_diary.group_identify_id');
$this->db->where('DATE(t1.start) <= GETDATE()');
$subquery = $this->db->get_compiled_select('schedule_diary as t1', TRUE);
/*For last, you select all rows not exists in the subquery set.*/
$this->db->where("not exists ($subquery)");
$query = $this->db->get('schedule_diary');
if($query){
return $query->result_array();
}
我认为这是适合您的代码!
答案 2 :(得分:0)
我不确定,但是我认为这个where
很奇怪:
$results = $this->db->where('where('DATE(start) >=',$currentDate)->get('schedule_diary')->result();
尝试在查询中将其删除:
$results = $this->db->where('DATE(start) >=',$currentDate)->get('schedule_diary')->result();
答案 3 :(得分:0)
使用此原始查询或将其转换为可识别代码的格式
SELECT * FROM schedule_diary WHERE DATE(START) > "$currentDate" AND group_identify_id NOT IN (SELECT distinct group_identify_id FROM test_1 WHERE DATE(START) <= "$currentDate")
它将完美运行。
工作屏幕截图。
SELECT * FROM schedule_diary WHERE DATE(START) > date("2019-07-14") AND group_identify_id NOT IN (SELECT distinct group_identify_id FROM schedule_diary WHERE DATE(START) <= date("2019-07-14"))
答案 4 :(得分:0)
尝试此查询:
$this->db->where('start >', $currentDate)->get('schedule_diary')->result();
答案 5 :(得分:0)
您可以尝试这种原始查询
HttpServletRequest#getParameterValues()
您可以使用codeigniter
select * from schedule_diary group by group_identify_id having start > CURDATE()