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

时间:2014-09-04 19:29:45

标签: php mysql codeigniter

我正在使用Codeigniter中的事件制作日历,所以我想根据月份和年份构建此事件的列表。

在数据库中,我有事件列表,我希望在字段日期之前检索,它使用DATE数据类型。

    if($year != null and $month != null)
    {
        $this->db->where('date', '?');
    }
    $events = $this->db->get('agenda')->result();

基本上我有一个yyyy-mm来与yyyy-mm-dd进行比较。

谢谢你,对不起我的英语。

4 个答案:

答案 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