Как быть, если какие-то переменные в WHERE отсутствуют? - MySQL

Узнай цену своей работы

Формулировка задачи:

День добрый! Очень прошу помощи у людей знающих sql. Как вывести данные из таблицы через where если конкретное имя атрибута не указано как в hotel name? p.s. Удалить это из запроса в части where не представляется возможным так как этот запрос будет идти в мое приложение и возможно пользователь не захочет проставлять этот параметр в поиске.
SELECT hotel_name, stars, city_name, hotel_price, servicename 
FROM mydb.hotel JOIN city ON city_idcity = idcity JOIN service ON service_idservice = idservice 
WHERE hotel_name = "?" city_name = "Москва";

Решение задачи: «Как быть, если какие-то переменные в WHERE отсутствуют?»

textual
Листинг программы
SELECT hotel_name, stars, city_name, hotel_price, servicename FROM mydb.hotel JOIN city ON city_idcity = idcity JOIN service ON service_idservice = idservice WHERE" +
            " ((hotel_name IS NULL) OR (hotel_name = VALUES(?))) && ((stars IS NULL) OR (stars = VALUES(?))) && ((city_name IS NULL) OR (city_name = VALUES(?))) && ((servicename IS NULL) OR (servicename = VALUES(?)));

Объяснение кода листинга программы

  1. Задачу, которую решает код: фильтрация результатов запроса на основе значений переменных, подставляемых в SQL-запрос динамически.
  2. Используемые в коде SQL-операторы:        - JOIN для объединения таблиц mydb.hotel, city и service по соответствующим столбцам;        - WHERE для установки условий фильтрации результатов запроса;        - IS NULL для проверки на пустое значение переменной;        - = для сравнения значений переменных и значений в таблице;        - VALUES для подстановки значений переменных в SQL-запрос.
  3. Переменные, используемые в коде:        - hotel_name (название отеля);        - stars (количество звезд отеля);        - city_name (название города);        - hotel_price (цена номера в отеле);        - servicename (название услуги).
  4. Значения переменных подставляются в SQL-запрос с помощью оператора VALUES.
  5. Если значение переменной является пустым (NULL), то соответствующее условие фильтрации будет всегда истинным, что позволит получить все записи, удовлетворяющие другим условиям.
  6. Код не содержит проверки на пустые значения переменных, которые подставляются в SQL-запрос. Если все переменные будут пустыми, то запрос вернет все записи из таблицы mydb.hotel.
  7. Код не содержит обработки ошибок, которые могут возникнуть при выполнении SQL-запроса.
  8. Код не содержит комментариев, объясняющих его работу или цели.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5
Похожие ответы