从数据库中选择月份和年份的日期
我在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);
Yeaaah!万分感谢! – 2014-09-04 19:55:42
请注意,这个正确的解决方案无法使用索引来搜索“日期”列。所以可能表现不尽如人意。 – 2014-09-04 20:08:36
该查询应解决您的问题!
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
是的,它应该但我没有yyyy/mm/dd信息。只是yyyy-mm。 – 2014-09-04 19:43:11
但是对于整个月你只需要从第1天开始到最后一天=)。你也可以date()PHP函数,给你今天的日期,就像这样:echo date('Y/m/d') – brunoroc 2014-09-04 19:49:09
这是MYSQL。日期字符串是'yyyy-mm-dd' – 2014-09-04 20:05:44
在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
这正是您所需要的索引范围扫描。
你的问题不清楚,对不起。你想要检索的行数范围是多少?看起来你想在他们检索它们之后按年份和月份排列它们。是对的吗? – 2014-09-04 19:32:05
我想检索用户选择的月份和年份的所有事件。但是在日期字段中日期的格式为yyyy-mm-dd。我只有yyyy-mm信息。 – 2014-09-04 19:34:43