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

Форум MySQL

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

 

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

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

тема: Организация поиска.
 
 автор: Sywooch   (19.11.2006 в 11:39)   письмо автору
 
 

Перелопатил форум но полностью подходящего решения не нашел :(

Нужно сделать поиск по нескольким параметрам:
Цена (от $cena_min до $cena_max ) - тоесть задается минимальное и максимальное значение а выводятся все из определенного диапазона.

Город - поиск по городу (если пусто то все)

Страна

Улица
----------------------

Вроди все просто но чего то запутался.

   
 
 автор: cheops   (19.11.2006 в 12:26)   письмо автору
 
   для: Sywooch   (19.11.2006 в 11:39)
 

А что вызывает сложность? Нужно просто в зависимости от выбранных полей, динамически сформировать запрос.

   
 
 автор: Sywooch   (19.11.2006 в 12:43)   письмо автору
 
   для: cheops   (19.11.2006 в 12:26)
 

Видимо реализация этого и вызывает сложность :(

   
 
 автор: Sywooch   (19.11.2006 в 15:54)   письмо автору
 
   для: Sywooch   (19.11.2006 в 12:43)
 

Вобщем поиск(полнотекстовый) по описанию товара сделал...
Но никак не пойму как сделать
поиск по:

диапазону цен
По городу
По площади (метры квадратные)
по типу (квартира , дом, офисное помещение)
И аренда или продажа


Тоесть отдельно то могу, а как разом организовать?

Может кто поможет?
Хотябы теоретически.

   
 
 автор: cheops   (19.11.2006 в 18:34)   письмо автору
 
   для: Sywooch   (19.11.2006 в 15:54)
 

1) У вас какая структура таблицы?
2) Вам необходимо динамически добавлять условия (реальный скрипт зависит от вашей HTML-формы поиска и структуры таблицы)
<?php
  $where
[] = "1=1";
  if(!empty(
$_POST['price_max'])) $where[] = "price < ".$_POST['price_max'];
  if(!empty(
$_POST['price_min'])) $where[] = "price > ".$_POST['price_min'];
  if(!empty(
$_POST['city'])) $where[] = "city = '".$_POST['city']."'";
  
// ...
  
$query "SELECT * FROM tbl WHERE ".implode(" AND ",$where);
?>

   
 
 автор: Sywooch   (19.11.2006 в 18:56)   письмо автору
 
   для: cheops   (19.11.2006 в 18:34)
 

Форма поиска:


<form name="find" method="post" action="search.html">
<table width="406" height="314" border="0" cellpadding="0" cellspacing="0" align="center">
<tr><td colspan="3"><img src="images/find_01.gif" width="406" height="50"></td></tr>
<tr><td height="31" colspan="3" align="center" valign="middle" bgcolor="#C2C1C1">
    <label>
<? if ($_POST['vid'] != 'arenda'$strtmp "";
        else 
$strtmp "checked";
        echo 
'<input name="vid" type="radio" value="arenda" '.$strtmp.' />';
     
?>
АРЕНДА
<? if ($_POST['vid'] != 'sale'$strtmp "";
        else 
$strtmp "checked";
        echo 
'<input name="vid" type="radio" value="sale" '.$strtmp.' />';
     
?>
ПРОДАЖА</label>          
</td></tr>
<tr><td height="126" colspan="3" align="center" bgcolor="#C2C1C1">
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td width="203" align="right" style="padding-right: 10px;">ЦЕЛЕВОЕ НАЗНАЧЕНИЕ<br /><br />ГОРОД<br /><br />ОБЩАЯ ПЛОЩАДЬ<br /><br />ЦЕНА (USD) </td>
    <td width="203">
    <select name="tip" id="select">
            <?php
             
/* if (empty($_POST['tip'])) $strtmp = "";
              else $strtmp = "selected"; */
              
$query "SELECT * FROM arenda 
                        WHERE hide = 'show' 
                        ORDER BY id"
;
              
$frm mysql_query($query);
              if(
$frm)
              {
                while(
$arenda_tip mysql_fetch_array($frm))
                {
                  if(
$arenda_tip['tip'] == $_POST['tip']) $strtmp "selected";
                  else 
$strtmp "";
                  echo 
"<option value=".$arenda_tip['tip'].$strtmp>".$arenda_tip['tip']."</option>";
                }
              }
            
?>
          </select>
      <br />
      <br>
<select name="gorod">
            <?php
              $query 
"SELECT * FROM arenda 
                        WHERE hide = 'show' 
                        ORDER BY id"
;
              
$gorod mysql_query($query);
              if(
$gorod)
              {
                while(
$arenda_gorod mysql_fetch_array($gorod))
                {
                  if(
$arenda_gorod['gorod'] == $_POST['gorod']) $strtmp "selected";
                  else 
$strtmp "";
                  echo 
"<option value='".$arenda_gorod['gorod']."' $strtmp>".$arenda_gorod['gorod']."</option>";
                }
              }
            
?>
          </select>
      <br />
      <br>
      от 
     <? if (empty($_POST['ploshad_min'])) $strtmp "";
        else 
$strtmp $_POST['ploshad_min'];
        echo 
'<input name="ploshad_min" value="'.$strtmp.'" type="text" size="8" maxlength="10" />';
     
?>
        
      до 
     <? if (empty($_POST['ploshad_max'])) $strtmp "";
        else 
$strtmp $_POST['ploshad_max'];
        echo 
'<input name="ploshad_max" value="'.$strtmp.'" type="text" size="8" maxlength="10" />';
     
?>
      <br />
      <br>
      от 
     <? if (empty($_POST['coint_min'])) $strtmp "";
        else 
$strtmp $_POST['coint_min'];
        echo 
'<input name="coint_min" value="'.$strtmp.'" type="text" size="8" maxlength="10" />';
     
?>
        
      до 
     <? if (empty($_POST['coint_max'])) $strtmp "";
        else 
$strtmp $_POST['coint_max'];
        echo 
'<input name="coint_max" value="'.$strtmp.'" type="text" size="8" maxlength="10" />';
     
?></td>
  </tr>
</table>
</td></tr>
<tr><td colspan="3"><img src="images/find_04.gif" width="406" height="31" alt=""></td></tr>
<tr><td width="48" bgcolor="#ABA9A9">&nbsp;</td>
<td width="80"><input type="image" name="submint" src="images/find_b.gif"></td>
<td width="278" bgcolor="#ABA9A9">&nbsp;</td></tr>
<tr><td colspan="3"><img src="images/find_06.gif" width="406" height="56" alt=""></td></tr>
</table>
 </form>



В форме намудрил чтоб запоминала че искали :)


Вот табличка:


CREATE TABLE `arenda` (
  `id` int(5) NOT NULL auto_increment,
  `name` tinytext NOT NULL,
  `images` mediumtext NOT NULL,
  `addres` tinytext NOT NULL,
  `img_name` tinytext NOT NULL,
  `short_content` mediumtext NOT NULL,
  `content` mediumtext NOT NULL,
  `data` datetime NOT NULL default '0000-00-00 00:00:00',
  `hide` enum('show','hide') NOT NULL default 'show',
  `tip` tinytext NOT NULL,
  `ploshad` text NOT NULL,
  `vid` enum('sale','arenda') NOT NULL default 'arenda',
  `coint` varchar(10) NOT NULL default '',
  `telefon` tinytext NOT NULL,
  `gorod` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=9 ;

   
 
 автор: kis-kis   (19.11.2006 в 16:22)   письмо автору
 
   для: Sywooch   (19.11.2006 в 11:39)
 

Тоже недавно с этим мучался...

   
 
 автор: Sywooch   (19.11.2006 в 21:13)   письмо автору
 
   для: kis-kis   (19.11.2006 в 16:22)
 

Вроди разобрался....
Надо было во какой запрос сделать :)

$query = "SELECT * FROM arenda WHERE vid='$_POST[vid]' AND tip='$_POST[tip]' AND gorod='$_POST[gorod]' AND coint BETWEEN $_POST[coint_min] AND $_POST[coint_max] ORDER BY coint";

Но тут возник вопрос!!!!

как мне такое вот AND coint BETWEEN $_POST[coint_min] AND $_POST[coint_max] ORDER BY coint

Повторить в этом же запросе но с площадью???

ЗЫ. Пробовал вот так:

$query = "SELECT * FROM arenda WHERE vid='$_POST[vid]' AND tip='$_POST[tip]' AND gorod='$_POST[gorod]' AND coint BETWEEN $_POST[ploshad_min] AND $_POST[ploshad_max] ORDER BY coint AND coint BETWEEN $_POST[coint_min] AND $_POST[coint_max] ORDER BY coint";

Не работает :( какой межуду ними разделитель влепить или может как нить по другому поступить????

   
 
 автор: cheops   (19.11.2006 в 21:45)   письмо автору
 
   для: Sywooch   (19.11.2006 в 21:13)
 

Конструкция ORDER BY идёт всегда после всех условий
$query = "SELECT * FROM arenda
WHERE vid='$_POST[vid]' AND tip='$_POST[tip]' AND gorod='$_POST[gorod]' AND (coint BETWEEN $_POST[ploshad_min] AND $_POST[ploshad_max]) AND (ploshad BETWEEN $_POST[ploshad_min] AND $_POST[ploshad_max]) ORDER BY coint";

   
 
 автор: Sywooch   (19.11.2006 в 23:15)   письмо автору
 
   для: cheops   (19.11.2006 в 21:45)
 

Спасибо!!!

А вот еще вопросик
Как можно при переборе столбца. Если значение повторяется игнорировать?

   
Rambler's Top100
вверх

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