2015-08-11 4 views
1

У меня возникли трудности с созданием отчета на основе ГОД от ДАТА. Таблица состоит из date of birth (dob), которая хранится как YYYY-MM-DD - например. 1955-01-11. Перед созданием отчета пользователю необходимо выбрать ВОЗРАСТ и/или GENDER. AGE классифицируется как:Запрос на отчет по дате

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

После того как пользователь выбрал AGE, значение снято с выбора, скажем, ВОЗРАСТ выбрано было 18-24. Это означает, что starting age is 18 и ending 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 для сокращения условных операторов.

Любая помощь приветствуется.

ответ

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; 
     } 
     } 
    } 
+0

Спасибо @raham, Если вы рассмотрите мое объяснение выше, я упомянул ** лучше структурировать свои запросы, чтобы разрешить несколько параметров фильтра **. Я пробовал использовать ** где **, но если ничего не передано **, где возвращаются ошибки **, следовательно, я использовал ** как ** вместо этого. Я также присоединяюсь к нескольким таблицам и запрашиваю их. – h4kl0rd

Смежные вопросы