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

Форум MySQL

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

 

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

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

тема: Помогите с логикой запроса - цены на автомашины с верхней и нижней границей
 
 автор: Alba   (26.06.2007 в 10:21)   письмо автору
 
 

Всем привет!

Есть объявления о покупке авто,
указан интервал цен от и до за которую покупатель купит авто.
При размещении объявления покупатель может вообще не указывать цены, либо один из пределов цен, т.е. верхний или нижний... либо полностью интервал
т.е. получается примерно вот что (возможные варианты):


Обявление__________Цена1__________Цена2
объявл №1          5000          20000   
объявл №2          5000          ---          
объявл №3           ---          20000
объявл №4           ---          ---


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

Надеюсь понятно изложил...

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

   
 
 автор: cheops   (26.06.2007 в 11:13)   письмо автору
 
   для: Alba   (26.06.2007 в 10:21)
 

Хм... а таблица объявлений у вас уже готова?

   
 
 автор: Alba   (26.06.2007 в 11:16)   письмо автору
 
   для: cheops   (26.06.2007 в 11:13)
 

все готово уже, только поиск сделать осталось...

   
 
 автор: cheops   (26.06.2007 в 11:17)   письмо автору
 
   для: Alba   (26.06.2007 в 11:16)
 

Приведите пожалуйста структуру таблицы, получить её можно при помощи оператора SHOW CREATE TABLE tbl, где tbl - имя таблицы.

   
 
 автор: Alba   (26.06.2007 в 11:20)   письмо автору
 
   для: cheops   (26.06.2007 в 11:17)
 

CREATE TABLE `prt_auto` (
`id` int(11) NOT NULL auto_increment,
`id_razdel` int(11) NOT NULL default '0',
`id_vid` int(11) NOT NULL default '0',
`id_marka` int(11) NOT NULL default '0',  
`other_marka` varchar(25) NOT NULL default '',
`id_model` int(11) NOT NULL default '0',
`other_model` varchar(25) NOT NULL default '',
`price` float NOT NULL default '0',
`price1` float NOT NULL default '0',
`torg` tinyint(1) NOT NULL default '0',
`id_kuzov` int(11) NOT NULL default '0',
`color` varchar(25) NOT NULL default '',
`condition` tinyint(4) NOT NULL default '0',
`made_year` int(4) NOT NULL default '0',
`made_year1` int(4) NOT NULL default '0',
`made_month` tinyint(4) NOT NULL default '0',
`transmission` tinyint(1) NOT NULL default '0',
`steps` tinyint(1) NOT NULL default '0',
`ruder` tinyint(1) NOT NULL default '0',
`type_drive` tinyint(1) NOT NULL default '0',
`v_engine` int(11) NOT NULL default '0',
`v_engine1` int(11) NOT NULL default '0',
`type_engine` tinyint(4) NOT NULL default '0',
`gas` tinyint(1) NOT NULL default '0',
`run` int(11) NOT NULL default '0',
`power` int(11) NOT NULL default '0',
`power1` int(11) NOT NULL default '0',
`place` tinyint(4) NOT NULL default '0',
`place1` int(11) NOT NULL default '0',
`capacity` int(11) NOT NULL default '0',
`foto` text NOT NULL,
`dopolnitelno` text NOT NULL,
`audio` tinyint(1) NOT NULL default '0',
`radio` tinyint(1) NOT NULL default '0',
`cd` tinyint(1) NOT NULL default '0',
`conditioner` tinyint(1) NOT NULL default '0',
`city` int(11) NOT NULL default '0',
`ather_city` varchar(25) NOT NULL default '',
`contacts` varchar(100) NOT NULL default '',
`email` varchar(60) NOT NULL default '',
`srok` int(11) NOT NULL default '0',
`date_pub` datetime NOT NULL default '0000-00-00 00:00:00',
`date_del` date NOT NULL default '0000-00-00',
`firm_id` int(11) NOT NULL default '0',
`password` varchar(32) NOT NULL default '',
`published` tinyint(1) NOT NULL default '0',\n  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251

   
 
 автор: Alba   (26.06.2007 в 11:21)   письмо автору
 
   для: Alba   (26.06.2007 в 11:20)
 

price - нижняя граница цены
price1 - верхняя граница

   
 
 автор: Alba   (26.06.2007 в 11:29)   письмо автору
 
   для: Alba   (26.06.2007 в 11:21)
 

В данной таблице хранятся объявления не только о покупке авто, но и продаже...
По полю id_razdel определяется какое это объявление: о продаже или о покупке

   
 
 автор: Alba   (26.06.2007 в 12:01)   письмо автору
 
   для: Alba   (26.06.2007 в 11:29)
 

Все!!! Справился...


<?
...
...

$where[] = "("
." IF(a.price>0 AND a.price1>0 AND ($srh->price BETWEEN a.price AND a.price1), 1, 0)"
." OR IF(a.price=0 AND a.price1>0 AND a.price1>=$srh->price, 1, 0)"
." OR IF(a.price>0 AND a.price1=0 AND a.price<=$srh->price, 1, 0)"
.")";
...
...
?>

$srh->price - цена которую ввел продавец

   
 
 автор: Alba   (26.06.2007 в 12:24)   письмо автору
 
   для: Alba   (26.06.2007 в 12:01)
 

Вот что получилось в итоге:


<?
$where
[] = "("
." ("
." IF(a.price>0 AND a.price1>0 AND ($srh->price BETWEEN a.price AND a.price1), 1, 0)"
." OR IF(a.price=0 AND a.price1>0 AND a.price1>=$srh->price, 1, 0)"
." OR IF(a.price>0 AND a.price1=0 AND a.price<=$srh->price, 1, 0)"
." )"
." OR IF(a.price=0 AND a.price1=0, 1, 0)"
.")";
?>


Как считаете, не слишком ли громоздко? ведб поиск может проводиться еще по 6 полям...

   
 
 автор: Trianon   (27.06.2007 в 11:23)   письмо автору
 
   для: Alba   (26.06.2007 в 12:24)
 

цена не указана и цена равна нулю - разные вещи.
Спросили Вы для первого варианта, а ответ привели - для второго.

   
Rambler's Top100
вверх

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