我正在尝试在表上显示数据。但在该表中数据应按以下顺序显示
1.即将到来的 future 日期从当前日期升序
2.过去的日期
示例 - 今天日期 2017-04-24
结果为:
1 2017-04-26
2 2017-04-28
3 2017-05-03
4 2017-08-24
5 2016-06-26
我的查询是 -
$this->db->select('*')->from('dnms_domains');
$this->db->where('is_status',0);
$this->db->order_by('IF(expiry_date <=DATE(NOW()), 0, 1), expiry_date DESC');
$query = $this->db->get();
//echo($this->db->last_query());
//exit;
return $query->result();
但是我没有得到预期的结果。
最佳答案
工作查询,经过测试和确认:
$query = $this->db->query('select *, DATEDIFF(expiry_date, CURRENT_DATE) as diff,
DATEDIFF(expiry_date, CURRENT_DATE) >= 0 as di
from dmns_domains order by di desc,
case when di = 1 then -1 * diff
else diff
end desc');
return $query->result();
缩进代码以提高可读性,您可能需要将其压缩为一行才能执行。
说明:添加了两个额外的列:
- 当前日期与列值之间的天数差异,
- 如果列值大于当前日期
然后使用这些指标对值进行排序。
关于mysql - Codeigniter 查询在 MYSQL 中首先显示即将到来的 future 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43581547/