[英]Selecting date by month and year from database
我正在使用Codeigniter中的事件制作日歷,因此我想建立按月和年排序的事件列表。
在數據庫中,我有事件列表,我想按字段日期檢索,該日期使用DATE數據類型。
if($year != null and $month != null)
{
$this->db->where('date', '?');
}
$events = $this->db->get('agenda')->result();
基本上我有一個yyyy-mm與yyyy-mm-dd進行比較。
謝謝你,抱歉我的英語。
假設$this->db->where()
使AND field = value
嘗試此操作。
$this->db->where("DATE_FORMAT(date,'%d')", $month);
$this->db->where("DATE_FORMAT(date,'%Y')", $year );
DATE_FORMAT()
函數是用於處理日期/設置日期格式的MYSQL函數,因此應等同於
WHERE
DATE_FORMAT(date,'%d') = '12'
AND DATE_FORMAT(date,'%Y') = '2014'
或者你可以使用
$this->db->where('MONTH(date)', $month);
$this->db->where('YEAR(date)', $year );
在MySQL中,您的查詢應該是這樣的
SELECT * FROM table_name WHERE data_field_name >='2000-10-1' //Y-m-d
SELECT * FROM table_name WHERE data_field_name >='2000-10-1' AND data_field_name <='2014-10-1'
SELECT * FROM table_name WHERE data_field_name >='2000-10-1'
SELECT * FROM table_name WHERE data_field_name BETWEEN '2000-10-1' AND '2014-10-1'
您也可以這樣做
SELECT * FROM table_name WHERE YEAR( data_field_name ) >= '2010' AND MONTH( data_field_name ) >='10' AND DAY( data_field_name ) >= '1'
等等....
對於您的用例,我會做這樣的事情
SELECT
*, MONTH( date_field) as month
FROM
table_name
WHERE
something = '1'
ORDER BY
month
最好的方法如下:
$monthstring = sprintf('%d-%d-01', $year, $month); /* make yyyy-mm-01 string */
$this->db->where ( "date >= '$monthstring'");
$this->db->where ( "date < '$monthstring' + INTERVAL 1 MONTH");
這是一個很好的方法,因為如果有一個索引可用,它允許使用索引來搜索date
列。
它擴展為這種MySQL where子句
WHERE date >= '2014-07-01' AND date < '2014-07-01' + INTERVAL 1 MONTH
這正是您進行索引范圍掃描所需要的。
該查詢應該可以解決您的問題!
SELECT * FROM table_name WHERE data_field_name >='01/10/2000'
要么
SELECT * FROM table_name WHERE data_field_name between '01/01/2009' and '01/01/2010'; //FOR YEAR
要么
SELECT * FROM table_name WHERE data_field_name between '01/01/2009' and '01/02/2009'; //FOR MONTH
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.