Как сделать поиск по базе с +/- допуском

Andi_X

Новичок
Есть поиск который осуществляется по 2-м полям, ширине и высоте изделия. Возможно ли сделать в форме поиска ещё поле в которое будет вводиться цифры допуска +/- мм. Т.е. вводишь нужные параметры, а он кроме основных ещё выдаёт результаты с применёным допуском.

Скрипт поиска.
PHP:
<?
if (isset($_POST['submit_s'])){$submit_s = $_POST['submit_s'];}

if (isset($_POST['search_width'])){$search_width = $_POST['search_width'];}

if (isset($_POST['search_height'])){$search_height = $_POST['search_height'];}

if (isset($submit_s))
{
if (empty($search_height) or strlen($search_height)  < 2){exit ("<p>Поисковый запрос высоты не введен, либо он менее 2-х символов. <br><br><input name='back' type='button' value='Вернуться назад' onclick='javascript:self.back();'></p>");}

if (empty($search_width) or strlen($search_width) < 2){exit ("<p>Поисковый запрос ширины не введен, либо он менее 2-х символов.</p> <br><br><input name='back' type='button' value='Вернуться назад' onclick='javascript:self.back();'>");}


$search_height = trim($search_height);
$search_height = stripslashes($search_height);
$search_height = htmlspecialchars($search_height);
$search_width = trim($search_width);
$search_width = stripslashes($search_width);
$search_width = htmlspecialchars($search_width);

}

else {exit("<p>Вы обратились к файлу без необходимых параметров.</p>");

}
?>

<?


$result = mysql_query("SELECT id, WN_NAME, WN_HEIGHT, WN_WIDTH FROM sale WHERE MATCH(WN_HEIGHT,WN_HEIGHT) AGAINST('$search_height' IN BOOLEAN MODE)", $db);

if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору [email protected] <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error());
}

if (mysql_num_rows($result) > 0)

{
$myrow = mysql_fetch_array($result);




do
{

printf ("<table align='center' class='sale'>
        <tr>
        <td class='sale_title'><p>%s</p></td>
	    </tr>
        <tr>
         <td>
         <p><img src=%s /></p>
		 <
		 
		 <p><b>Высота / Ширина:</b> %s / %s
		 


         </td>
         </tr>
        </table><br><br>", $myrow["WN_NAME", $myrow["WN_HEIGHT"], $myrow["WN_WIDTH"]"]);

}
while ($myrow = mysql_fetch_array ($result));
echo "<p><br><input name='back' type='button' value='Вернуться назад' onclick='javascript:self.back();'></p>";

}

else
{
echo "<p>Информация по Вашему запросу в базе не найдена. <br><br><input name='back' type='button' value='Вернуться назад' onclick='javascript:self.back();'></p>";
exit();
}

?>
.
 

Вложения

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Можно, надо в условии выборки подставить допуски. А именно прибавить/отнять от нужных значений в колонках
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Не совсем понятно. Можно пример кода?
Нет. Нельзя. Попробуй достичь результата самостоятельно.
Мы можем только помочь в его достижении.
Первый совет тебе дали.
Делай, показывай что сделал, говори что получилось.

1. Ты где эту копипасту взял?
2. Зачем полнотекстовый поиск?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
HINT:
Допуск для тебя будет равен

([Нужное значение] [минус] [нижняя граница допуска]) < [Нужное значение] < ([Нужное значение] [плюс] [верхняя граница допуска])

Под нужным значением я имел в виду ту колонку, по которой ты ищещь.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
c0dex
Банальный битвин нэ?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Mr_Max
Естественно, только чтобы его получить, (нижнюю и верхнюю границы), надо подумать сначала, как я написал.
 

Andi_X

Новичок
Теперь в принципе понятно. Т.е. вводимое в поле "+/-" значение загоняется в переменную, а уже потом эта переменная отнимается и приплюсовывается к искомому значению.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Тебе надо всего-то дописать в свой запрос AND [искомая колонка данных] BETWEEN xxx AND yyy
 

Andi_X

Новичок
PHP:
$result = mysql_query("SELECT id, WN_NAME,  WN_HEIGHT, WN_WIDTH FROM sale WHERE MATCH(WN_HEIGHT) AGAINST('$search_height' IN BOOLEAN MODE) AND WN_HEIGHT BETWEEN $search_height - $admission AND $search_height + $adm", $db);
По идее, он должен искать число находящееся между искомым и +/- допуском. Он находит лишь введённое точное значение и выводит его 2 раза.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Понятно, ладно, скажем так, ты решил не думать головой.

Думал, мне померещилось, что ты высоту ищешь как полнотекстовое поле, но, видимо не померещилось...

Убери свой MATCH AGAINST нафиг. И что у тебя за переменная $adm?

Соответственно код с "допусками", если пользователь не ввел ничего в +/-, то искать надо по четкому соответствию
Код:
SELECT s.* 
  FROM sale s 
 WHERE (s.height BETWEEN :heightLow AND :heightHigh) AND (s.width BETWEEN :widthLow AND :widthHigh)
 

Andi_X

Новичок
Вот что получилось.

PHP:
$result = mysql_query("SELECT id, WN_HEIGHT, WN_WIDTH FROM sale WHERE (WN_HEIGHT BETWEEN ".$search_height." - ".$search_admission." AND ".$search_height." + ".$search_admission.") and (WN_WIDTH BETWEEN ".$search_width." - ".$search_admission." AND ".$search_width." + ".$search_admission.")", $db);

if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору [email protected] <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error());
}
 
Сверху