как искать поля в базе данных с диапазоном дат на mysql codeigniter - PullRequest
0 голосов
/ 27 сентября 2018

Я пытался создать поисковую систему с фильтром диапазона дат, но всякий раз, когда я набираю текст в поле 'search_textbox', он не включает дату, когда он ищет только те поля, в которых встречается выражение 'name', например '% a%';

if($search !=''):
        $added_query = "and date_created like '%".$search."%' or 
                                name like '%".$search."%' or
                                  alias like '%".$search."%' or
                                  designation like '%".$search."%' 
                                  ";
        else:
        $added_query ="";
        endif;
        $project_details = $this->db->query("SELECT *
                                 FROM ".$query."_man_power
                                  WHERE date_created BETWEEN '".$date_from."' AND '".$date_to."'
                                  ".$added_query."
                                order by date_created desc
                                  ");
            return $project_details;

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

При объединении этих условий важно использовать скобки, чтобы база данных знала, в каком порядке оценивать каждое условие. Сгруппируйте условия И, ИЛИ с круглыми скобками, например: -

if($search !=''):
    $added_query = "and ( 
        date_created like '%".$search."%' or 
        name like '%".$search."%' or
        alias like '%".$search."%' or
        designation like '%".$search."%' 
        )";
else:
  $added_query ="";
endif;
$project_details = $this->db->query("SELECT *
        FROM ".$query."_man_power
        WHERE date_created BETWEEN '".$date_from."' AND '"
       .$date_to."'".$added_query." order by date_created desc");
        return $project_details;` 
0 голосов
/ 27 сентября 2018

Возможно, вы неправильно форматируете даты в предложении where.См .: https://www.w3schools.com/SQl/sql_dates.asp

Вы хотите убедиться, что $date_from и $date_to выглядят следующим образом в зависимости от типа:

$date_from = '2018-06-01 0:00:00';
$date_to = '2018-06-30 23:59:59';

Вы можете проверить свой запрос лучше, чтобы найти проблемупросмотрев его.

$sql = "SELECT * FROM ".$query."_man_power";
$sql .= " WHERE date_created BETWEEN '".$date_from."' AND '".$date_to."'".$added_query;
$sql .= " order by date_created desc";

var_dump($sql);

$project_details = $this->db->query($sql);
...