(PHP+MySQL) Как организовать поиск по БД?

Тет_19
Дата: 08.08.2006 07:28:00
Есть скрипт поиска по MySQL таблицам, сейчас покажу код, может кому надо будет.

Все работает, но вопрос вот в чем, к примеру в базе данных есть названия: Test man g 90, Test man g 91, ну и так далее. Когда ввожу поиск одного из них, выводятся все 400 позиций с этими названиями.

Что нужно изменить в этом скрипте, чтобы поиск был более точен.

Помогите, пожалуйста.

Заранее спасибо.

P.S. Если у кого-то завалялся скрипт поиска по базе, скиньте, пожалуйста.

С уважением,


автор
<?php

// Данные для подключения к БД MySql($db,$user,$pass,$server это имя БД, пользователь БД, пароль БД и сервер БД соответсвенно)

$db = "price";

$user = "root";

$pass = "";

$server = "localhost";

$db_data = array(//Очень важный массив:$db_data[table]-это имя таблицы для поиска, $db_data[search]-массив имен полей в которых искать информацию, будьте осторожны!Не добавляйте все поля подряд, а то получится очень громоздкий запрос.

"table" => "geri",

"search" => array("field0", "field1", "field2", "field3", "field4"));

/*

В качестве тестирования я использовал следующую таблицу:

CREATE TABLE 'geri' (

'id' int(11) NOT NULL auto_increment,

'name' varchar(255) NOT NULL default '',

'last' varchar(255) NOT NULL default '',

'adress' varchar(255) NOT NULL default '',

PRIMARY KEY ('id')

);

*/

// Пробуем подключиться

if (!mysql_connect($server, $user, $pass)) die('Проверьте настройки для подключения к серверу MySql');

//

if (!mysql_select_db($db)) die('Проверьте существование указанной базы данных');

echo "<form method='post'>";//

echo "<input type='text' size=48 name='search' value='" . (isset($_POST['search'])?$_POST['search']:'') . "'>";//

echo "<input type='hidden' name='submit' value='1'><input type='submit' value='Найти!'>";//

//

if (!empty($_POST['submit'])) {//

$search = $_POST['search'];//

$search=addslashes($search);//.

$words = explode(" ", $search);//

$sql = "SELECT * FROM $db_data[table] WHERE ";//

$i = 0;//



foreach($db_data['search'] as $v) {//

foreach($words as $v1) {//

if ($i != 0)//

$sql .= "OR";//

$sql .= " $v LIKE '%$v1%' ";//

$i++;//увеличиваем счетчик


}


}

if($result=mysql_query($sql))//

{

if(mysql_num_rows($result)){//

while($r=mysql_fetch_array($result)){//

echo "<br><b>WG $r[field0]</b> <br>Geri $r[field1], Описание $r[field2], Ean code $r[field3], Netto/NET P90 $r[field4], <br>";

}

}

else//

{

echo "Поиск не дал результатов.";

}

}

else

{

echo "Произошла ошибка при поиске, пожалуйста обратитесь к администратору Веб-сайта за разьяснением.";//

}

}

?>
vkle
Дата: 09.08.2006 00:05:38

Как понимаю, сначала Вам надо определиться с критериями поиска. Сейчас
ищется совпадение ЛЮБОГО слова из строки запроса на поиск - соответственно и
результат таков. Возможно, следует пересмотреть этот подход, для начала
делать поиск по "наиболее строгому соответствию" - совпадению ВСЕХ слов. Ну
а при нулевом результате первого поиска, может быть, выкидывать слова по
одному, по два и т.д. - "менее строгое соответствие"
ИМХО

Posted via ActualForum NNTP Server 1.3