繁体   English   中英

在 CodeIgniter 中按日期过滤 MySQL 条目

[英]Filtering MySQL entries by date in CodeIgniter

目前我正在使用 CodeIgniters MVC 框架来获取特定时间段之间的记录。 我对下拉列表进行了相同的过滤并取得了结果,但我无法弄清楚如何使用日期选择器进行相同的过滤。 以下是我的View model:

<html lang="en">
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>    
</head>
<body>
        <div id="statusModal">
    <input type="date" name="startDate" class="startDate" id="startDate"/>
    <input type="date" name="endDate" class="endDate" id="endDate"/>
    <select name="status" class="status" id="status">
        <option>Draft</option>
        <option>Unpublish</option>
        <option>Publish</option>
    </select>
    <br/><br/>
    <button type="button" class="alertbox" id="alertbox" name="alertbox">alertbox</button>
    <br/><br/>    
    <div id="result"></div>
    </div>
    </form>
</body>
</html>

<script>

    $(document).ready(function(){

        load_status();
        
    $('#alertbox').click(function(){
        var startDate = $('#startDate').val();
        var endDate = $('#endDate').val();
        if(startDate != '' && endDate != ''){
        $.ajax({
            url:"<?php echo base_url(); ?>testcontroller/fetch_dat",
            method:"POST",
            data:{startDate:startDate, endDate:endDate},
            success:function(data){
                $('#result').html(data)
            }
        })
        }else{
            alert("Please enter a date");
        }
    })

        function load_status(status){
            $.ajax({
                url:"<?php echo base_url(); ?>testcontroller/fetch_stat",
                method:"POST",
                data:{status:status},
                success:function(data){
                    $('#result').html(data)
                }
            })
        }

        $('#status').click(function(){
            var search = $(this).val();
            if(search != ''){
                load_status(search);
            }
            else{
                load_status();
            }
        })
    })

</script>

Controller Class:

class Testcontroller extends CI_Controller
   {  
      public function index() 
      { 
      $this->load->view('crm/test');      
       }
         function fetch_dat(){
            $output ='';
            $startDate = '';
            $endDate = '';
            $this->load->model('crm/user_model');
  
            if($this->input->post('startDate')){
              $startDate = $this->input->post('startDate');
            }
            if($this->input->post('endDate')){
               $endDate = $this->input->post('endDate');
             }
            $data = $this->user_model->fetch_date($startDate,$endDate);
            
            $output .= '
              <div class="table-responsive">
                 <table class="table table-bordered table-striped">
                    <tr>
                    <th>Customer id</th>
                    <th>Title</th>
                    <th>Added Date</th>
                    <th>Status</th>
  
                    </tr>
              ';
           if($data->num_rows() > 0)
           {
              foreach($data->result() as $row)
              {
              $output .= '
                 <tr>
                 <td>'.$row->id.'</td>
                 <td>'.$row->title.'</td>
                 <td>'.$row->added_date.'</td>
                 <td>'.$row->status.'</td>
                 </tr>
              ';
              }
           }
           else
           {
              $output .= '<tr>
                 <td colspan="5">No Data Found</td>
                 </tr>';
           }
           $output .= '</table>';
           echo $output;
           }

         function fetch_stat(){
            $output ='';
            $status = '';
            $this->load->model('crm/user_model');
  
            if($this->input->post('status')){
              $status = $this->input->post('status');
            }
            $data = $this->user_model->fetch_status($status);
            
            $output .= '
              <div class="table-responsive">
                 <table class="table table-bordered table-striped">
                    <tr>
                    <th>Customer id</th>
                    <th>Title</th>
                    <th>Added Date</th>
                    <th>Status</th>
  
                    </tr>
              ';
           if($data->num_rows() > 0)
           {
              foreach($data->result() as $row)
              {
              $output .= '
                 <tr>
                 <td>'.$row->id.'</td>
                 <td>'.$row->title.'</td>
                 <td>'.$row->added_date.'</td>
                 <td>'.$row->status.'</td>
                 </tr>
              ';
              }
           }
           else
           {
              $output .= '<tr>
                 <td colspan="5">No Data Found</td>
                 </tr>';
           }
           $output .= '</table>';
           echo $output;
           }
      }     

还有我的 model class:

function fetch_status($status){
        $this->db->select(*);
        $this->db->from(crm_listings);
        if($status != ''){
            $this->db->where('status',$status);
        }
        $this->db->order_by('id','DESC');
        return $this->db->get();
    }

    function fetch_date($startDate,$endDate){
        $this->db->select(*);
        $this->db->from(crm_listings);
        if($startDate != '' && $endDate != ''){
            $this->db->where('added_date BETWEEN "' . $startDate . '" AND "' . $endDate . '"',$startDate,$endDate);
        }
        $this->db->order_by('id','DESC');
        return $this->db->get();
    }

嗨,在对上面的帖子发表所有评论之后,因为您正在以 Ymd 格式获得 $startDate 和 $endDate,这是我的答案,您需要将 added_date 强制转换为日期,在这里查询是如何做到的。

 function fetch_date($startDate,$endDate){
        $this->db->select(*);
        $this->db->from(crm_listings);
        if($startDate != '' && $endDate != ''){
            $this->db->where('cast(added_date as date) BETWEEN "' . $startDate . '" AND "' . $endDate . '"',null,false);
        }
        $this->db->order_by('id','DESC');
        return $this->db->get();
    }

它会为你工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM