Как в запросе sql игнорировать не введенные данные запроса?

У меня в php записываются в переменные данные запроса типа $name = "Пользователь вводит название", $sity = "вводит город", $country = "вводит страну" и тд. Потом по нажатию кнопки выполняется скрипт поиска в бд sql:

SELECT `trolleybus` . * , `sitys`.`sity` FROM `trolleybus`
LEFT JOIN `sitys` ON `trolleybus`.`ids` = `sitys`.`ids`
WHERE `sitys`.`sity` = '{$ssity}' OR `trolleybus`.`name` = '{$sname}' 
OR`trolleybus`.`brand` = '{$sbrand}' OR `trolleybus`.`year` = '{$syear}' OR
`trolleybus`.`factory` = '{$sfactory}' OR `trolleybus`.`country` = '{$scountry}'
ORDER BY `trolleybus`.`brand` 
DESC LIMIT 0, 30 

При OR в запросе можно вводить не все поля($переменные), но при вводе всего, он выводит все значения которые найдет(ну простой принцип работы OR), а мне надо чтобы вместо OR был AND тогда он выводи правильно, но нельзя пренебречь хоть одним полем(нужно вводить все). Как реализовать поиск в котором можно было бы не вводить все поля запроса, и чтобы он выводил только соответствующие переменным запросы? Спасибо.


Ответы (1 шт):

Автор решения: Харичев Антон

Решение было на поверхности, а я плавал в глубине. Надо было просто заморочиться с запросом, расставить скобки и OR-ами и ввести чтобы проверял пустоту - OR '{$sname}'='' , оригинальное название - OR 'sitys'.'sity' = '{$sname}', и LIKEом похожие - 'sitys'.'sity' LIKE '%{$ssity}%' Весь код:

SELECT `trolleybus` . * , `sitys`.`sity`
FROM `trolleybus`
LEFT JOIN `sitys` ON `trolleybus`.`ids` = `sitys`.`ids`
WHERE 
(`sitys`.`sity` LIKE '%{$ssity}%' OR '{$ssity}'='' OR `sitys`.`sity` = '{$ssity}') AND 
(`trolleybus`.`name` LIKE '%{$sname}%' OR '{$sname}'='' OR `sitys`.`sity` = '{$sname}') AND 
(`trolleybus`.`brand` LIKE '%{$sbrand}%' OR '{$sbrand}'='' OR `sitys`.`sity` = '{$sbrand}') AND 
(`trolleybus`.`year` LIKE  '%{$syear}%' OR '{$syear}'='' OR `sitys`.`sity` = '{$syear}') AND 
(`trolleybus`.`factory` LIKE  '%{$sfactory}%' OR '{$sfactory}'='' OR `sitys`.`sity` = '{$sfactory}') AND 
(`trolleybus`.`country` LIKE '%{$scountry}%' OR '{$scountry}'='' OR `sitys`.`sity` = '{$scountry}')
ORDER BY `trolleybus`.`brand` 
DESC LIMIT 0, 30 ")
→ Ссылка