|
|
|
| Перелопатил форум но полностью подходящего решения не нашел :(
Нужно сделать поиск по нескольким параметрам:
Цена (от $cena_min до $cena_max ) - тоесть задается минимальное и максимальное значение а выводятся все из определенного диапазона.
Город - поиск по городу (если пусто то все)
Страна
Улица
----------------------
Вроди все просто но чего то запутался. | |
|
|
|
|
|
|
|
для: Sywooch
(19.11.2006 в 11:39)
| | А что вызывает сложность? Нужно просто в зависимости от выбранных полей, динамически сформировать запрос. | |
|
|
|
|
|
|
|
для: cheops
(19.11.2006 в 12:26)
| | Видимо реализация этого и вызывает сложность :( | |
|
|
|
|
|
|
|
для: Sywooch
(19.11.2006 в 12:43)
| | Вобщем поиск(полнотекстовый) по описанию товара сделал...
Но никак не пойму как сделать
поиск по:
диапазону цен
По городу
По площади (метры квадратные)
по типу (квартира , дом, офисное помещение)
И аренда или продажа
Тоесть отдельно то могу, а как разом организовать?
Может кто поможет?
Хотябы теоретически. | |
|
|
|
|
|
|
|
для: 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);
?>
|
| |
|
|
|
|
|
|
|
для: 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"> </td>
<td width="80"><input type="image" name="submint" src="images/find_b.gif"></td>
<td width="278" bgcolor="#ABA9A9"> </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 ;
|
| |
|
|
|
|
|
|
|
для: Sywooch
(19.11.2006 в 11:39)
| | Тоже недавно с этим мучался... | |
|
|
|
|
|
|
|
для: 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";
Не работает :( какой межуду ними разделитель влепить или может как нить по другому поступить???? | |
|
|
|
|
|
|
|
для: 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"; | |
|
|
|
|
|
|
|
для: cheops
(19.11.2006 в 21:45)
| | Спасибо!!!
А вот еще вопросик
Как можно при переборе столбца. Если значение повторяется игнорировать? | |
|
|
|