|
|
|
| Помогите пожалуйста!
Нужно сделать поиск по min и max, но эти входящие значения могут быть пустыми
или одно из них .
Пробовал сделать что-то типа:
if(isset($_GET['min_price'])&& !empty($_GET['min_price']) || $_GET['min_price']){$min_price= $_GET['min_price']; } else {$min_price="";}
if(isset($_GET['max_price'])&& !empty($_GET['max_price'])){$max_price= $_GET['max_price']; } else {$max_price="";}
$result = mysql_query("SELECT * FROM data WHERE id LIKE '".$id."%' AND price BETWEEN $min_price AND $max_price ORDER BY id ");
|
но когда хоть одно значение пустое выводит ошибку. | |
|
|
|
|
|
|
|
для: nazus
(07.11.2010 в 00:18)
| | Жуть...
как, по Вашему, должен работать, допустим, первый условный оператор?
Во что при пустых переменных (после подстановки) вырождается текст запроса?
В данном случае проще обойтись без BETWEEN и записать условие явно. | |
|
|
|
|
|
|
|
для: Trianon
(07.11.2010 в 00:22)
| | Извените, пожалуйста, за допущеную ошибку.
if(isset($_GET['min_price'])&& !empty($_GET['min_price'])){$min_price= $_GET['min_price']; } else {$min_price="";}
if(isset($_GET['max_price'])&& !empty($_GET['max_price'])){$max_price= $_GET['max_price']; } else {$max_price="";}
$result00 = mysql_query("SELECT * FROM data WHERE id LIKE '".$id."%' AND price BETWEEN $min_price AND $max_price ORDER BY id ");
|
| |
|
|
|
|
|
|
|
для: nazus
(07.11.2010 в 00:28)
| | Он должен достать из базы количество товара название и т д.
здесь в коде я это не указывал,
меня интерисует только как сделать если мин и макс пустые
или хоть одна из них. | |
|
|
|
|
|
|
|
для: nazus
(07.11.2010 в 00:38)
| | Дак и делайте price >= $min и price <= $max
<?php
if (isset($_GET['min_price']) && !empty($_GET['min_price']))
$min_price = "price >= ". (int) $_GET['min_price'];
else
$min_price = 1;
if (isset($_GET['max_price']) && !empty($_GET['max_price']))
$max_price = "price >= ". (int) $_GET['max_price'];
else
$max_price = 1;
$result = mysql_query("SELECT * FROM data WHERE id LIKE '".$id."%' AND $min_price AND $max_price ORDER BY id");
?>
|
Типа такого. И не забывайте обрабатывать данные, которые получаете от пользователя ($_GET, $_POST и др) | |
|
|
|
|
|
|
|
для: neadekvat
(07.11.2010 в 00:44)
| | что-то как-то громоздко IMHO..
<?php
$sql = "SELECT * FROM data WHERE id LIKE '$id%' ";
if (!empty($_GET['min_price'])) $sql .= " AND price >= ". (int) $_GET['min_price'];
if (!empty($_GET['max_price'])) $sql .= " AND price <= ". (int) $_GET['min_price'];
$sql .= " ORDER BY id";
$result = mysql_query($sql);
?>
|
да... подстановка $id на совести автора. | |
|
|
|
|
|
|
|
для: Trianon
(07.11.2010 в 00:53)
| | Блин, когда ж я достигну просветления в области сокращения кода :) | |
|
|
|
|
|
|
|
для: neadekvat
(07.11.2010 в 00:55)
| | Если ставить задачу именно сократить код... Вы можете меня спокойно обскакать :))
Я как-то всё ж решил не усугублять краткостью в ущерб читабельности. | |
|
|
|
|
|
|
|
для: Trianon
(07.11.2010 в 00:53)
| | очипятка. в 3 строке в конце не $_GET['min_price'] должно быть, а $_GET['max_price'] | |
|
|
|
|
|
|
|
для: psychomc
(07.11.2010 в 01:01)
| | ofcourse Кэп :) | |
|
|
|
|
|
|
|
для: Trianon
(07.11.2010 в 01:02)
| | ай-яй-яй, всегда так серьезно относитесь к мелочам, а тут позволяете себе шутить))) | |
|
|
|
|
|
|
|
для: neadekvat
(07.11.2010 в 00:44)
| | Мне нужно если переменные пустие то достать все записи по этим полям
что-то типа
if(isset($_GET['min_price'])&& !empty($_GET['min_price'])){$min_price = (int) $_GET['min_price']; } else {$min_price="MIN(price)";}
if(isset($_GET['max_price'])&& !empty($_GET['max_price'])){$max_price = (int) $_GET['max_price']; } else {$max_price="MAX(price)";}
$result = mysql_query("SELECT * FROM data WHERE id LIKE '".$id."%' AND price BETWEEN $min_price AND $max_price ORDER BY id");
|
плюс к этой веселухе я пытаюсь прикрутить постраничную навигацию | |
|
|
|
|
|
|
|
для: nazus
(07.11.2010 в 01:19)
| | А сейчас как? | |
|
|
|
|
|
|
|
для: neadekvat
(07.11.2010 в 01:32)
| | ваш код работает если
else $max_price =100000000000;
но я точно не заю кокой может быть $max_price может быть больше. | |
|
|
|
|
|
|
|
для: nazus
(07.11.2010 в 01:37)
| | в чем прайс-то?
В лирах чтоли?
Или Вы Землю оптом продаете? | |
|
|
|
|
|
|
|
для: Trianon
(07.11.2010 в 01:48)
| | Решил вот так
<?php
if (isset($_GET['min_price']) && !empty($_GET['min_price'])) $min_price = (int) $_GET['min_price']; else $min_price = 0;
if (isset($_GET['max_price']) && !empty($_GET['max_price'])) $max_price = (int) $_GET['max_price']; else $max_pr = mysql_query("SELECT MAX(price) FROM data");
$temp = mysql_fetch_array($max_pr);
$max_price=$temp[0];
?>
|
| |
|
|
|
|
|
|
|
для: nazus
(07.11.2010 в 02:01)
| | Ох капец вы фигней занимаетесь.
Во-первых, лучше использовать код Trianon'а
Во-вторых, внимательно посмотрите, что получается в моем случаи - там при пустых значениях пришедших данных не "AND price <= 1", а просто единичка, т.е. она фактически не учитывается при поиске строк.
Собирайте запрос в отдельную переменную, а потом подставляйте ее в запрос.
А при отработке - выводите на экран свой запрос, вы же в слепую работаете.
<?php
$sql = "Запрос";
echo $sql; // выводим запрос, чтобы видеть, что от бд требуем
mysql_query($sql);
|
| |
|
|
|