根据日期

时间:2015-08-11 11:26:00

标签: php mysql codeigniter

我在 DATE 中根据生成报告时遇到了困难。该表由date of birth (dob)组成,存储为YYYY-MM-DD - 例如。 1955-01-11。在生成报告之前,用户必须选择年龄和/或 GENDER AGE 分类为:

  

0-17,18-24,25-54,55-64和65 +

用户选择年龄后,会从选择中捕获该值,例如年龄选择 18-24 。这意味着starting age is 18ending age is 24。因此,要生成的报告应该是成员,年龄介于18至24岁之间

我的表格:

<label name="age">AGE</label>
<select id="age" name="age" class="form-control">
    <option value="">---</option>
    <option value="0-17">0 - 17</option>
    <option value="18-24">18 - 24</option>
    <option value="25-54">25 - 54</option>
    <option value="55-64">55 - 64</option>
    <option value="65-150">65+</option>
</select>

我的控制器:

if ($this->input->post('submit')) {
    $age = $this->input->post('age');
    $gender = $this->input->post('gender');

    $this->data['results'] = $this->member_model->getMembers($age, $gender);
}
$this->template->build('reports/index', $this->data);

我的模特:

public function getMembers($age="", $gender="") {
      if ($age != "") {
        // separate age (start, end)
        $age = explode('-', $age);

        return $this->db->from($this->table_members)
                          ->select(array(
                            'transmember.firstname',
                            'transmember.lastname',
                            'transmember.dob',
                            'transmember.gender',
                            ))
                          ->where('EXTRACT(YEAR from transmember.dob) >=', $age[1])
                          ->where('EXTRACT(YEAR from transmember.dob) <=', $age[0])
                          ->like('transmember.gender', $gender)
                          ->get()->result();
      }
}

使用的框架是CodeIgniter。面临的问题是:

  1. 如何仅根据年份过滤数据?
  2. 如何更好地构建查询以允许多个过滤器选项?例如。按年龄,性别,国籍等我尝试使用like来减少条件语句。
  3. 感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

在模型中尝试以下查询。

public function getMembers($age="", $gender="") 
     {
        if ($age != "") 
       {
        // separate age (start, end)
          $age = explode('-', $age);
          $this->db->select("firstname,lastname,dob,gender");
          $this->db->from("your_table_name");
          $this->db->where("dob >=",$age[1]);
          $this->db->where("dob <=",$age[0]);
          $this->db->where("gender",$gender);

          $query = $this->db->get();

          if($query->num_rows() > 0)
          {
             return $query->result();
          }
         else
         {
            return NULL;
         }
      }  
   }