将月份和年份与数据库表进行比较

时间:2016-12-27 13:08:35

标签: php codeigniter

我有一个下拉列表,其中包含如下数据 -

2016年11月
2016年12月

有一个过滤器按钮,点击过滤器按钮后我想按照选定的月份和年份显示数据。日期存储在数据库表中,如 -

2016-12-26 18:32:00

这是我到目前为止所做的:

ajax

$(document).on('click','#page_filter_btn',function(){
    var page_date_list=$('#page_date_list').val();
    $.ajax({
        url:base_url+'admin/disp_all_pages',
        type:'post',
        data:{page_date_list:page_date_list,action:'page_filter'},
        success:function(data){
            $('#disp_all_pages').html(data);
        }
    });
}); 

控制器

public function disp_all_pages()
{
    $date = $this->input->post('page_date_list');
    $month = strtok($date,  ' ');
    echo $year = substr($date, strpos($date, " ") + 1); 
    $data = $this->admin_data->disp_filter_page($month,$year); //Send month and year to model 
}

型号

public function disp_filter_page($month,$year)
{  
    $this->db->select('p.post_type,p.ID, p.post_date, p.post_title, u.user_login');
    $this->db->from('sa_posts p,sa_terms t,sa_users u');
    $this->db->where('post_type','page');
    $this->db->where('u.ID=p.post_author');
    $this->db->group_by('p.ID');
    $query=$this->db->get();
    return $query->result();
} 

我只想按下拉列表中的选定值显示数据 谢谢。

2 个答案:

答案 0 :(得分:3)

首先,您需要将月份从字符串转换为数字值,例如 11 而不是 11月。所以disp_all_pages函数的代码应该是这样的:

$date = "November 2016";
$month = date('m', strtotime(strtok($date,  ' ')));
$year = substr($date, strpos($date, " ") + 1);

现在您可以直接将其与DB列进行比较,如@Dannis所述:

public function disp_filter_page($month,$year)
{  
    $this->db->select('p.post_type,p.ID, p.post_date, p.post_title, u.user_login')
            ->from('sa_posts p,sa_terms t,sa_users u')
            ->where(array('post_type' => 'page', 'u.ID' => 'p.post_author', 'MONTH(p.post_date)' => $month, 'YEAR(p.post_date)' => $year))
            ->group_by('p.ID');
    $query = $this->db->get();
    return $query->result();
} 

希望它会有所帮助。

答案 1 :(得分:1)

MySQL中有MONTH()YEAR()函数。尝试添加:

 $this->db->where('MONTH(p.post_date)', $month);
 $this->db->where('YEAR(p.post_date)', $year);