2015-02-07 78 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