У меня возникли трудности с созданием отчета на основе ГОД от ДАТА. Таблица состоит из 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
. Проблема сталкивается является:
- Как фильтровать данные на основе только ГОДА?
- Как лучше структурировать свои запросы, чтобы разрешить несколько параметров фильтра? например. По возрасту, полу, национальности и т. Д. Я попытался использовать
like
для сокращения условных операторов.
Любая помощь приветствуется.
Спасибо @raham, Если вы рассмотрите мое объяснение выше, я упомянул ** лучше структурировать свои запросы, чтобы разрешить несколько параметров фильтра **. Я пробовал использовать ** где **, но если ничего не передано **, где возвращаются ошибки **, следовательно, я использовал ** как ** вместо этого. Я также присоединяюсь к нескольким таблицам и запрашиваю их. – h4kl0rd