我有一个下拉列表,其中包含如下数据 -
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();
}
我只想按下拉列表中的选定值显示数据 谢谢。
答案 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);