Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поиск BEETWEN min and max
 
 автор: nazus   (07.11.2010 в 00:18)   письмо автору
 
 

Помогите пожалуйста!
Нужно сделать поиск по 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 ");     

но когда хоть одно значение пустое выводит ошибку.

  Ответить  
 
 автор: Trianon   (07.11.2010 в 00:22)   письмо автору
 
   для: nazus   (07.11.2010 в 00:18)
 

Жуть...
как, по Вашему, должен работать, допустим, первый условный оператор?
Во что при пустых переменных (после подстановки) вырождается текст запроса?


В данном случае проще обойтись без BETWEEN и записать условие явно.

  Ответить  
 
 автор: nazus   (07.11.2010 в 00:28)   письмо автору
 
   для: 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:38)   письмо автору
 
   для: nazus   (07.11.2010 в 00:28)
 

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

  Ответить  
 
 автор: neadekvat   (07.11.2010 в 00:44)   письмо автору
 
   для: 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 и др)

  Ответить  
 
 автор: Trianon   (07.11.2010 в 00:53)   письмо автору
 
   для: 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 на совести автора.

  Ответить  
 
 автор: neadekvat   (07.11.2010 в 00:55)   письмо автору
 
   для: Trianon   (07.11.2010 в 00:53)
 

Блин, когда ж я достигну просветления в области сокращения кода :)

  Ответить  
 
 автор: Trianon   (07.11.2010 в 00:58)   письмо автору
 
   для: neadekvat   (07.11.2010 в 00:55)
 

Если ставить задачу именно сократить код... Вы можете меня спокойно обскакать :))
Я как-то всё ж решил не усугублять краткостью в ущерб читабельности.

  Ответить  
 
 автор: psychomc   (07.11.2010 в 01:01)   письмо автору
 
   для: Trianon   (07.11.2010 в 00:53)
 

очипятка. в 3 строке в конце не $_GET['min_price'] должно быть, а $_GET['max_price']

  Ответить  
 
 автор: Trianon   (07.11.2010 в 01:02)   письмо автору
 
   для: psychomc   (07.11.2010 в 01:01)
 

ofcourse Кэп :)

  Ответить  
 
 автор: psychomc   (07.11.2010 в 01:08)   письмо автору
 
   для: Trianon   (07.11.2010 в 01:02)
 

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

  Ответить  
 
 автор: nazus   (07.11.2010 в 01:19)   письмо автору
 
   для: 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");

плюс к этой веселухе я пытаюсь прикрутить постраничную навигацию

  Ответить  
 
 автор: neadekvat   (07.11.2010 в 01:32)   письмо автору
 
   для: nazus   (07.11.2010 в 01:19)
 

А сейчас как?

  Ответить  
 
 автор: nazus   (07.11.2010 в 01:37)   письмо автору
 
   для: neadekvat   (07.11.2010 в 01:32)
 

ваш код работает если
else $max_price =100000000000;
но я точно не заю кокой может быть $max_price может быть больше.

  Ответить  
 
 автор: Trianon   (07.11.2010 в 01:48)   письмо автору
 
   для: nazus   (07.11.2010 в 01:37)
 

в чем прайс-то?
В лирах чтоли?
Или Вы Землю оптом продаете?

  Ответить  
 
 автор: nazus   (07.11.2010 в 02:01)   письмо автору
 
   для: 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];
?>

  Ответить  
 
 автор: neadekvat   (07.11.2010 в 02:18)   письмо автору
 
   для: nazus   (07.11.2010 в 02:01)
 

Ох капец вы фигней занимаетесь.
Во-первых, лучше использовать код Trianon'а
Во-вторых, внимательно посмотрите, что получается в моем случаи - там при пустых значениях пришедших данных не "AND price <= 1", а просто единичка, т.е. она фактически не учитывается при поиске строк.
Собирайте запрос в отдельную переменную, а потом подставляйте ее в запрос.
А при отработке - выводите на экран свой запрос, вы же в слепую работаете.

<?php
$sql 
"Запрос";
echo 
$sql// выводим запрос, чтобы видеть, что от бд требуем
mysql_query($sql);

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования