Как я могу уменьшить количество SQL запросов, которые мне нужны, чтобы это работало? - PullRequest
1 голос
/ 26 мая 2020

Итак ... Я немного разбираюсь в программировании, но мои навыки ограничены. Сегодня я пытаюсь сделать простой запрос, чтобы медицинский персонал работал в больнице, в которой я сейчас работаю, между выбранными датами.

Я хочу иметь 4 даты ввода, например

this

Это в испанском языке sh, так что вот перевод:

Входы даты - это «фильтры»

Started working >= to this date
Started working <= to this date
Quit the job >= to this date
Quit the job <= to this date

И 2 входа выбора являются заголовком степень специализации, имеющаяся у человека. (Мне нужна опция, в которой оба значения могут быть нулевыми)

Так что я могу обойти это, сделав запрос SQL для каждого возможного случая следующим образом:

    if ($titulo == '0' && $especialidad == '0' && $date1!=null && $date2==null && 
$bdesde==null && $bhasta==null){     

$sql_querry= "select * from personal where starting_date >= '$date1'" }

elseif ( ... and so on  

База данных MySQL.

Но мне было интересно, есть ли способ делать то, что я хочу, с меньшим количеством кода.

1 Ответ

1 голос
/ 26 мая 2020

Вы можете использовать выражения case и условные logi c:

select * 
from personal 
where 
    (:starting_date_after      is null or starting_date >= :starting_date_after)
    and (:starting_date_before is null or starting_date <= :starting_date_before)
    and (:ending_date_after    is null or ending_date   >= :ending_date_after)
    and (:ending_date_before   is null or ending_date   <= :ending_date_before)

Это предполагает, что ваш запрос принимает 4 параметра, которые могут быть null (ie не предоставлены пользователем) или set (ie задано пользователем): параметры :starting_date_after и :starting_date_before предназначены для фильтрации столбца таблицы starting_date, а :ending_date_after и :ending_date_before применяются к ending_date.

Примечание что вам следует использовать параметризованные запросы (как показано выше), а не объединять переменные в строке запроса, чтобы сделать ваш код более эффективным и, что более важно, предотвратить внедрение SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...