Я работаю в CodeIgniter с поиском, который будет запрашивать базу данных.
Три поля: «Местоположение» (раскрывающийся список), «Дата» (дата) и «Тип события» (раскрывающийся список).
Код, который я сейчас использую:
public function search_flyers($location, $date) {
$date = $this->utils_model->get_sql_date($date);
$query = $this->db->query("SELECT *, flyers.fid FROM flyers
LEFT JOIN event_dates ON flyers.fid = event_dates.fid
WHERE ((flyers.interval='weekly'
AND DATEDIFF('" . $date . "',flyers.start_date)%7=0
AND '" . $date . "' <= flyers.end_date)
OR (flyers.interval='fornightly'
AND DATEDIFF('" . $date . "',flyers.start_date)%14=0
AND '" . $date . "' <= flyers.end_date)
OR (flyers.interval='manual'
AND event_dates.date = '" . $date . "'
OR flyers.start_date = '".$date."'
AND '".$date."' <= flyers.end_date) AND flyers.approved = 1)
AND flyers.location = '".$location."'
GROUP BY flyers.fid
ORDER BY flyers.start_date ASC");
$data['flyers'] = $query->result();
$data['rows'] = $query->num_rows();
return $data;
Упомянутая дата события используется вместе с полем «интервал», чтобы определить, попадает ли событие в дату, которую искал пользователь.
Событие также должно быть одобрено для возможности показа в результатах поиска.
Проблема в том, что форма не работает, если пользователь заполняет только одно поле.
Предыдущий разработчик написал этот код, и мне поручено заставить его работать.
Обычно я бы изменил AND flyers.location...
на OR flyers.location
, но это означает, что он вернет результаты либо даты, либо местоположения, которое вы указали.