mortido

Рейтинг
61
Регистрация
01.10.2014
bupy7:
Нет, подожди. Я так и не понял, а чем вариант klassev не катит? О_о

$start_cost = $_GET['start_cost'] ? (int)$_GET['start_cost'] : null;
$end_cost = $_GET['start_cost'] ? (int)$_GET['start_cost'] : null;

if (!is_null($start_cost) && !is_null($end_cost)) {
$query_cost = " AND cost BETWEEN {$start_cost} AND {$end_cost}";
} else {
$query_cost = ' AND cost>=' . (int)$start_cost;
}

просто выводит то, что я ввел в первое поле. то есть ввел 2 и второе поле оставил пустым или даже заполнил, все равно выводит только то, что стоит 2

---------- Добавлено 17.02.2015 в 22:59 ----------

bupy7:
Нет, подожди. Я так и не понял, а чем вариант klassev не катит? О_о

он не катил тем, что работал только если заполнены оба поля или последнее, а если оба поля оставались пустым, то это засчитывалось как найти в диапазоне от 0 до 0

вообщем. вот как на этом сайте фильтр: http://ru.hearthhead.com/cards . там есть поле: Цена. и мне нужно, чтобы у меня результат также выводился и если в поле ничего нет, то просто выводится все, что есть в таблице. больше ничего не могу сказать)

да я пробовал, но в нем самая первая проблема, где при заполненном первом поле и пустом втором результатов нету

мне уже неловко вас доставать) просто последнее осталось: я ввел в start_cost 10, а в end_cost число, которое меньше 10 и результат выводится как-будто я ввел от 0 до 10, то есть если я ввожу в end_cost значение меньше, чем в start_cost, то результата быть не должно, так как последнее значение не может быть меньше начального. как то так

bupy7:
ну. тогда так делай.

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>={$start_cost}";
} elseif ($start_cost < $end_cost) {
$query_cost = " AND cost<={$end_cost}";
}

все работает. только как сделать, чтобы ноль тоже принимался как значение, а то если я ввожу от 0 и до 0, просто выводит все данные. а так все работает

слушайте. код выводит при первом заполненном поле и пустом втором, но теперь что-то еще страннее стало) если два одинаковых значения, то выводит от наименьшего и дальше все что есть. вообщем при двух одинаковых значениях в полях не корректно результат выдает

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

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

string(65) "SELECT * FROM cards WHERE class_id AND `cost` BETWEEN 3 AND 5 " с class_id все нормально выводится. навряд ли в нем дело может быть, так как я пробовал его менять на cost и ничего, тоже самое

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

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

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}";
}

Господи, Алилуя! Спасибо преогромное)

bupy7:


mortido, покажи еще после mysql_query что будет

var_dump("SELECT * FROM cards WHERE class_id $query_cost $query_class $query_quality $query_nabor");die();

string(52) "SELECT * FROM cards WHERE class_id AND `cost`=>3 "

когда заполняю только первое поле и когда заполняю одинаковыми значениями два поля: bool(false)

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

Всего: 170