select * from stock where product_name like '".$searchType."%' or product_brand like '".$searchType."%' or type like '".$searchType."%' and (price between ".$min_price." and ".$max_price.") group by product_name
У меня есть таблица с именем stock, где у меня есть столбцы product_name, product_brand, type и price. Теперь у меня есть ползунок ценового диапазона, который работает только для type, но не работает для product_name и product_brand. Например.
Когда я перемещаю ползунок цены и его диапазон от 200 до 500 и выбираю type, он показывает результат, если type не находится в диапазоне, он показывает result not found. Но в случае product_name и product_brand он всегда показывает данные, если они находятся в ценовом диапазоне или нет.
Итак, как я могу исправить эту проблему? Пожалуйста, помоги мне.
Спасибо
Какая польза от group by в заявлении?
удалить повторяющиеся данные @Rafee
но почему у вас есть повторяющиеся данные? Лучше содержать данные в чистоте, чем придумывать проблему, скрывая ее в своих запросах.






Вам нужно будет сгруппировать условия OR в вашем SELECT, иначе, как только одно из них будет совпадать, оно перестанет проверять любые другие условия ...
select *
from stock where ( product_name like '".$searchType."%' or
product_brand like '".$searchType."%' or
type like '".$searchType."%') and
(price between ".$min_price." and ".$max_price.")
group by product_name
Вам также следует изучить подготовленные операторы, поскольку это решает различные другие проблемы (включая SQL-инъекции и ложные кавычки в ваши условия поиска).
Созданный вами запрос имеет много циклов. Вот почему результаты перегружены. Я не могу дать точного решения, потому что базы данных нет у меня. Но попробуйте использовать левое соединение и уменьшить количество петель.
Вам, вероятно, понадобятся скобки вокруг всех условий ИЛИ, в противном случае, если какое-либо совпадение, оно выберет эту строку, а не это условие в квадратных скобках с диапазоном.