bupy7

bupy7
Рейтинг
30
Регистрация
18.03.2014
Должность
Web-developer

Автор, сделай замену прошлого куска на этот:

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}";
}
mortido:
string(52) "SELECT * FROM cards WHERE class_id AND `cost`=>3 "

только не один cost нужно оборачивать. И что там class_id делает? Смысл в нем есть для запроса?)

Тьфу блин. Я запрос неправильно отправил. 🤪 хотя тогда б работал between

klassev:
как он вам даст true , в случае , если гетом не передается на пример start_cost ???

у автора в форму оба значения попадают. Если одно из не попадёт, то это уже не between запрос, а больше или меньше. Но, т.к. у ТС всё же оба они попадают - выкручиваемся как можем :D

Чего срёмся-то?) Давайте жить дружно. (с)

mortido, Надо значения и имена полей в одинарные кавычки обрамлять, а таблиц в грависы.

---------- Добавлено 17.02.2015 в 21:37 ----------

klassev:
ему нужно вытащить в диапазоне - значит нужны старт и енд значения, их наличие мы проверяем иссетом - так?

isset в этом случае всегда даст true, а нам не просто диапазон нужен. =)

klassev:
если заданы оба значения 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();
klassev:
$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 ----------

klassev:
для empty() ноль пустое значение
http://php.net/manual/ru/function.empty.php

всё верно. никто и не отрицает.

после

$result = mysql_query("SELECT * FROM cards WHERE class_id $query_cost $query_class $query_quality $query_nabor ", $link);

вставь

var_dump($result);die();

и покаж.

mortido:
при заполненном первом поле: 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 ----------

klassev:
Что в теме я не заметил?

Что isset всегда true будет давать.

klassev:

ЗЫ

разве

$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 ----------

mortido:
хз. также, если заполняю первое поле и оставляю пустым второе - ничего не выводит.

да быть этого не может. у вас тогда должен был добавиться в запрос это 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}";

}

1 2345 6
Всего: 55