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

Форум MySQL

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

 

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

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

тема: Выборка по цене от и до
 
 автор: starpom   (24.09.2010 в 10:32)   письмо автору
 
 

Нужен запрос в базу с выбором объектов по цене от и до какой-то.
Выглядит так
$sql = "SELECT * FROM table WHERE `flag` = $flag AND `price` BETWEEN '$price1' AND '$price2' ";


В принципе выборку делает, но если первый прайс в форму не ввести или ввести 0, то выберает все вподряд, аналогично если не ввести второй прай.
Как лучше сделать: через условия подставлять 1 в первом прайсе и милионы во втором или как-то изменить запрос?Или может еще как?

  Ответить  
 
 автор: heed   (24.09.2010 в 12:16)   письмо автору
 
   для: starpom   (24.09.2010 в 10:32)
 

А какой тип данных в `price` ?

  Ответить  
 
 автор: starpom   (24.09.2010 в 14:01)   письмо автору
 
   для: heed   (24.09.2010 в 12:16)
 

VARCHAR

Я так догадываюсь надо ба интеджер???

  Ответить  
 
 автор: heed   (24.09.2010 в 14:24)   письмо автору
 
   для: starpom   (24.09.2010 в 14:01)
 

строки сравниваются по другому
mysql> SELECT '10.01' BETWEEN '' AND '2.05';
+-------------------------------+
| '10.01' BETWEEN '' AND '2.05' |
+-------------------------------+
|                             1 |
+-------------------------------+
1 row in set (0.02 sec)

mysql> SELECT CAST('10.01' AS DECIMAL(20.2)) BETWEEN '' AND '2.05';
+------------------------------------------------------+
| CAST('10.01' AS DECIMAL(20.2)) BETWEEN '' AND '2.05' |
+------------------------------------------------------+
|                                                    0 |
+------------------------------------------------------+

// CAST(... AS DECIMAL может ругаться в старых версиях

Думаю надо формировать один из трёх видов запроса по ситуации z >= x , z <= y , z between x and y
// (x <= z <= y )

а так первый должен работать и в between (если с другими типами) , со вторым как и говорите в between придётся вставлять максимальное число

  Ответить  
 
 автор: starpom   (24.09.2010 в 14:41)   письмо автору
 
   для: heed   (24.09.2010 в 14:24)
 

Спасибо

  Ответить  
 
 автор: Trianon   (24.09.2010 в 15:35)   письмо автору
 
   для: starpom   (24.09.2010 в 14:01)
 

любой числовой, подходящий по диапазону и точности представления.

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

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