2015-02-07 54 views
1
订购

你好,这是为订购和获取数据我的模型代码:笨:按升序日期

$this->db->order_by($oBy, "asc"); 
$query = $this->db->get('books'); 

一切工作正常,但是在我的数据库我正在存储的日期作为字符串,例如01-JAN-2014。

因此,当我订购日期时,它会按日期而不是年份排列,我可以知道如何通过按年排序来解决问题,但数据仍将显示为2014年1月1日以及它会按升序显示?谢谢!

错误:enter image description here

+0

您不应该将您的日期存储为字符串。使用数据库支持的日期格式之一。然后,您可以使用数据库中可用的日期函数来设置字段的格式,但是您喜欢它并能够按照您的需求进行订购。 – Tom 2015-02-07 12:22:33

+0

为什么不直接写完整的数据库查询,然后在最后添加ORDER BY'day' ASC? – 2015-02-07 14:29:01

回答

2
$this->db->select('str_to_date('.$oBy.', "%d-%b-%Y") day',false);//select your colum as new column name wich is converted as str ot date 
//yo can do select more. 
$this->db->order_by('day','ASC'); 
$query = $this->db->get('books'); 

这将解决您的问题

+0

嗯,但我得到上述错误。 – Outliers 2015-02-07 14:26:57

+0

错误消息意味着你没有选择其他列。你没有阅读我在解决方案的第二条评论时所说的话。添加这行'$ this-> db-> select('books。*')'。在'this-> db-> order_by('day','ASC')之前;'这行 – 2015-02-07 15:40:18

+0

是的,它工作了,谢谢! :)对不起,但我在SQL查询非常糟糕。 – Outliers 2015-02-07 16:29:56

0

我想这$ OBY是你的列名

$this->db->order_by("str_to_date(" . $oBy . ", '%d-%b-%Y')", "asc"); 

%d的月份=日,数字(00..31)

%B =缩一个月名(Jan..Dec)

%Y =年份,数字,四位

+1

解决方案的想法是好的。但它会产生错误。 – 2015-02-07 12:30:58

+0

@ShaifulIslam无法自己测试它,但是我现在明白我已经看到了您的答案?谢谢。 – AdrienXL 2015-02-07 12:34:31