klassev: как он вам даст true , в случае , если гетом не передается на пример start_cost ???
у автора в форму оба значения попадают. Если одно из не попадёт, то это уже не between запрос, а больше или меньше. Но, т.к. у ТС всё же оба они попадают - выкручиваемся как можем :D
$query_cost = " AND cost BETWEEN $start_cost AND $end_cost";
}
при нулевых значениях выполняться должно
...и не нужно ничего городить
Полезность вашего кода стремится к 0. Можно вообще тогда isset убрать раз там (int). Потом, автору не просто выбор между нужен. И, не сортировка, а фильтрация.
---------- Добавлено 17.02.2015 в 21:22 ----------
Автор, сделай замену прошлого куска на этот:
if ($start_cost && $end_cost && $start_cost < $end_cost) {$query_cost = " AND cost BETWEEN {$start_cost} AND {$end_cost}";
} elseif ($start_cost > $end_cost || $start_cost == $end_cost) {
$query_cost = " AND cost>={$start_cost}";
} elseif ($start_cost < $end_cost) {
$query_cost = " AND cost<={$end_cost}";
}
string(52) "SELECT * FROM cards WHERE class_id AND `cost`=>3 "
только не один cost нужно оборачивать. И что там class_id делает? Смысл в нем есть для запроса?)
Тьфу блин. Я запрос неправильно отправил. 🤪 хотя тогда б работал between
как он вам даст true , в случае , если гетом не передается на пример start_cost ???
у автора в форму оба значения попадают. Если одно из не попадёт, то это уже не between запрос, а больше или меньше. Но, т.к. у ТС всё же оба они попадают - выкручиваемся как можем :D
Чего срёмся-то?) Давайте жить дружно. (с)
mortido, Надо значения и имена полей в одинарные кавычки обрамлять, а таблиц в грависы.
---------- Добавлено 17.02.2015 в 21:37 ----------
ему нужно вытащить в диапазоне - значит нужны старт и енд значения, их наличие мы проверяем иссетом - так?
isset в этом случае всегда даст true, а нам не просто диапазон нужен. =)
если заданы оба значения int переводит их из строки в цифру и подставляем...что не так?
всё верно
---------- Добавлено 17.02.2015 в 21:39 ----------
mortido, покажи еще после mysql_query что будет
var_dump("SELECT * FROM cards WHERE class_id $query_cost $query_class $query_quality $query_nabor");die();$start_cost = (int)$_GET["start_cost"];
$end_cost = (int)$_GET["end_cost"];
if (!empty($start_cost) OR !empty($end_cost))
{
$query_cost = " AND cost BETWEEN $start_cost AND $end_cost";
}
при нулевых значениях выполняться не будет...поэтому и нет сортировки
if (isset($_GET['start_cost']) && isset($_GET['end_cost']))
{
$start_cost = (int)$_GET['start_cost'];
$end_cost = (int)$_GET['end_cost'];
$query_cost = " AND cost BETWEEN $start_cost AND $end_cost";
}
при нулевых значениях выполняться должно
...и не нужно ничего городить
Полезность вашего кода стремится к 0. Можно вообще тогда isset убрать раз там (int). Потом, автору не просто выбор между нужен. И, не сортировка, а фильтрация.
---------- Добавлено 17.02.2015 в 21:22 ----------
для empty() ноль пустое значение
http://php.net/manual/ru/function.empty.php
всё верно. никто и не отрицает.
после
вставь
var_dump($result);die();
и покаж.
при заполненном первом поле: int(3) int(0) string(12) " AND cost=>3"
при пустых обоих полях: int(0) int(0) string(12) " AND cost=>0"
ну вот. что не так тогда?) в первом варианте выбор цены, которая больше или равна 3, во-втором выбор цены, которая больше или равна 0.
---------- Добавлено 17.02.2015 в 21:07 ----------
Что в теме я не заметил?
Что isset всегда true будет давать.
ЗЫ
разве
$start_cost = (int)$_GET['start_cost'] ?: 0;
и
$start_cost = (int)$_GET['start_cost'];
это не одно и то же?
кстати да 🤪 я чот (int) проигнорил.
После
if ($start_cost && $end_cost && $start_cost < $end_cost) {
$query_cost = " AND cost BETWEEN {$start_cost} AND {$end_cost}";
} elseif ($start_cost > $end_cost || $start_cost == $end_cost) {
$query_cost = " AND cost=>{$start_cost}";
} elseif ($start_cost < $end_cost) {
$query_cost = " AND cost<={$end_cost}";
}
вставьте
var_dump($start_cost, $end_cost, $query_cost);die();
и вывод сюда.
klassev, вы тему читаете? =)
---------- Добавлено 17.02.2015 в 20:50 ----------
хз. также, если заполняю первое поле и оставляю пустым второе - ничего не выводит.
да быть этого не может. у вас тогда должен был добавиться в запрос это AND cost=>{$start_cost}
А вы файл весь не можете прикрепить где этот поиск? Может где переопределяется?
$start_cost = (int)$_GET['start_cost'];
$end_cost = (int)$_GET['end_cost'];
if ($start_cost && $end_cost && $start_cost < $end_cost) {
$query_cost = " AND cost BETWEEN {$start_cost} AND {$end_cost}";
} elseif ($start_cost > $end_cost || $start_cost == $end_cost) {
$query_cost = " AND cost=>{$start_cost}";
} elseif ($start_cost < $end_cost) {
$query_cost = " AND cost<={$end_cost}";
}