簡體   English   中英

從數據庫中按月和年選擇日期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM