Это то, что вы хотите?
SELECT *
FROM builds
WHERE approved = 'yes' and
(manufacturer = $query_company or $query_company = '*') and
build_price BETWEEN $price_min AND $price_max;
Я просто размещаю это как пример для вашей логики (чтобы избежать таких проблем, как SQL-инъекция). Тем не менее, я хотел бы предложить вам сделать два различных запросов в приложении:
SELECT *
FROM builds
WHERE approved = 'yes' and
manufacturer = $query_company and
build_price BETWEEN $price_min AND $price_max;
и
SELECT *
FROM builds
WHERE approved = 'yes' and
build_price BETWEEN $price_min AND $price_max;
Преимущество этого подхода состоит в том, что эти запросы могут воспользоваться индексами. Первый builds(manufacturer, approved, build_price)
и второй builds(approved, build_price)
. Единственный запрос с or
(или like
) также не может быть оптимизирован.
EDIT:
Позвольте мне понятнее о втором варианте:
if ($company == "ANY") {
$sql = "SELECT *
FROM builds
WHERE approved = 'yes' and
build_price BETWEEN $price_min AND $price_max"
}
else {
$sql = "SELECT *
FROM builds
WHERE approved = 'yes' and
manufacturer LIKE '$query_company' and
build_price BETWEEN $price_min AND $price_max"
}
$card_data = mysqli_query($con, $sql);
Это просто пример. Вы можете переназначить $ sql для большей части запроса, а затем просто добавить дополнительное предложение в оператор if
. У этого подхода есть еще одно преимущество. Вы можете распечатать $sql
после подстановки переменных, чтобы увидеть, как он выглядит.
При этом вы должны узнать, как переключиться на параметризованные запросы, чтобы предотвратить атаки SQL-инъекций.
Используйте 'like' ключевое слово – George
Вы пропускаете один' AND' в вашем 'WHERE' статье – kero
Какая ошибка? Вместо прямого выполнения вашего SQL, эхо его на экран. Что он говорит? – user1032531