Php 从数据库中按月份和年份选择日期

Php 从数据库中按月份和年份选择日期,php,mysql,codeigniter,Php,Mysql,Codeigniter,我正在用Codeigniter中的事件制作一个日历,所以我想建立一个按月份和年份排序的事件列表 在数据库中,我有一个事件列表,我想通过使用日期数据类型的字段date来检索 if($year != null and $month != null) { $this->db->where('date', '?'); } $events = $this->db->get('agenda')->result(); 基本上,我有

我正在用Codeigniter中的事件制作一个日历,所以我想建立一个按月份和年份排序的事件列表

在数据库中,我有一个事件列表,我想通过使用日期数据类型的字段date来检索

    if($year != null and $month != null)
    {
        $this->db->where('date', '?');
    }
    $events = $this->db->get('agenda')->result();
基本上,我有一个yyyy-mm-dd和一个yyyy-mm-dd进行比较


谢谢你,我的英语很抱歉。

这个查询应该可以解决你的问题

SELECT * FROM table_name WHERE data_field_name >='01/10/2000'


在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
    *, MONTH( date_field) as month
FROM
    table_name
WHERE
    something = '1'
ORDER BY 
    month
等等

对于您的用例,我会这样做

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
    *, MONTH( date_field) as month
FROM
    table_name
WHERE
    something = '1'
ORDER BY 
    month

假设
$this->db->where()
生成一个
和field=value
试试这个

$this->db->where("DATE_FORMAT(date,'%d')", $month);
$this->db->where("DATE_FORMAT(date,'%Y')", $year );
DATE\u FORMAT()

WHERE
     DATE_FORMAT(date,'%d') = '12'
 AND DATE_FORMAT(date,'%Y') = '2014'
或者你可以用

$this->db->where('MONTH(date)', $month);
$this->db->where('YEAR(date)', $year );

最好的方法如下:

$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");

这正是索引范围扫描所需要的。

您的问题不清楚,抱歉。要检索的行的范围是什么?似乎你想在取回它们后按年按月订购。是吗?我想检索用户选择的月份和年份的所有事件。但在日期字段中,日期是yyyy-mm-dd格式。我只有yyyy-mm信息。是的,应该有,但我没有yyyy/mm/dd信息。只是yyyy-mm。但是如果有整整一个月的时间,您只需要求显示从第1天到最后一天的时间=)。您还可以使用date()PHP函数,为您提供今天的日期,就像这样:echo date('Y/m/d')它是MYSQL。日期字符串是
yyyy-mm-dd
Yeaaah!多谢各位!请注意,这种正确的解决方案无法使用索引来搜索
date
列。因此,它的表现可能不如它所能表现的那么好。
$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");
 WHERE date >= '2014-07-01' AND date < '2014-07-01' + INTERVAL 1 MONTH