Запрос mysql дает неверные данные

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 он всегда показывает данные, если они находятся в ценовом диапазоне или нет.

Итак, как я могу исправить эту проблему? Пожалуйста, помоги мне.

Спасибо

Вам, вероятно, понадобятся скобки вокруг всех условий ИЛИ, в противном случае, если какое-либо совпадение, оно выберет эту строку, а не это условие в квадратных скобках с диапазоном.

Nigel Ren 30.08.2018 11:49

Какая польза от group by в заявлении?

Rafee 30.08.2018 11:49

удалить повторяющиеся данные @Rafee

omkara 30.08.2018 11:50

но почему у вас есть повторяющиеся данные? Лучше содержать данные в чистоте, чем придумывать проблему, скрывая ее в своих запросах.

ADyson 30.08.2018 12:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
32
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно будет сгруппировать условия 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-инъекции и ложные кавычки в ваши условия поиска).

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

Другие вопросы по теме