我正在使用Codeigniter中的事件制作日历,所以我想根据月份和年份构建此事件的列表。
在数据库中,我有事件列表,我希望在字段日期之前检索,它使用DATE数据类型。
if($year != null and $month != null)
{
$this->db->where('date', '?');
}
$events = $this->db->get('agenda')->result();
基本上我有一个yyyy-mm来与yyyy-mm-dd进行比较。
谢谢你,对不起我的英语。
答案 0 :(得分:2)
假设$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 );
答案 1 :(得分:0)
在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
答案 2 :(得分:0)
执行此操作的最佳方法如下:
$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
这正是索引范围扫描所需要的。
答案 3 :(得分:-1)
该查询应解决您的问题!
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