primitiv
@primitiv
Веб программист

Как правильно составить SQL запрос SELECT PDO PHP для получения данных по двум строкам?

Питаюсь реализовать получение данных с БД по двум строкам
SELECT * FROM `table_products` WHERE `product_type` = :product_type AND `product_group` = :product_group

Однако бывает так что вторая переменная пустая и тогда запрос на выборку ломается (БД ничего не возвращает), как реализовать sql запрос так чтобы в случае если есть одна переменная с данными на выборку, искать по нему, а если есть и данные для выборки во второй переменной, то получать данные по ним обоим. Я использовал логическое "И", и понимаю что возможно проблема в нём, но скажу сразу, "ИЛИ" меня не устраивает, в виду того что, если в обоих переменных есть данные для выборки они оба должны использоваться, если только в одном то вторая переменная должна отбрасываться (не учитываться) при выборке данных. Спасибо и извините за тавтологии
  • Вопрос задан
  • 179 просмотров
Пригласить эксперта
Ответы на вопрос 3
FanatPHP
@FanatPHP
Чебуратор тега РНР
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Питаюсь реализовать получение данных с БД по двум строкам
Не по строкам, а по столбцам, обычно говорят "по полям". Самое очевидное и простое решение - проверять наличие переменной и соответственно добавлять нужное поле "вручную" конкатенацией строк запроса.
Ответ написан
Комментировать
@rPman
так как не сказано какая именно логика в запросе должна быть при нулевых значениях, я выбрал в примере вариант - и в базе тоже нули.
select .. from ... where ... and (:product_group is null and `product_group` is null) or (`product_group` = :product_group)

чтобы один и тот же параметр в запросе использовать несколько раз, используй пользовательские переменные (живут до конца сессии), т.е. выполняешь два запроса, первый
set @product_group=:product_group
а уже в самом запросе вместо :product_group используешь @product_group
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы