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

Форум MySQL

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

 

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

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

тема: Помогите с поиском.
 
 автор: Egoist   (08.08.2006 в 06:53)   письмо автору
 
 

Есть скрипт поиска по MySQL, сейч покажу код, может кому надо будет.

Все работает, но вопрос вот в чем, к примеру в базе данных есть названия: "Wapu MAN G 90,
Wapu MAN F 90, Wapu MAN F 2000, Ean code 4046326175011", ну и так далее. Когда ввожу поиск одного из них (например Wapu MAN G 90), выводятся все 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 
"Произошла ошибка при поиске, пожалуйста обратитесь к администратору Веб-сайта за разьяснением.";//

}

}

?>

   
 
 автор: tuder   (08.08.2006 в 08:30)   письмо автору
 
   для: Egoist   (08.08.2006 в 06:53)
 

>Все работает, но вопрос вот в чем, к примеру в базе данных
>есть названия: "Wapu MAN G 90,
>Wapu MAN F 90, Wapu MAN F 2000, Ean code 4046326175011", ну
>и так далее. Когда ввожу поиск одного из них (например Wapu
>MAN G 90), выводятся все 400 позиций с этими названиями.
>
>Что нужно изменить в этом скрипте, чтобы поиск был более
>точен.
Чтобы было точнее - надо искать составляющие запроса через AND, а не через OR

>if ($i != 0)//
>
>$sql .= "OR";//
>
>$sql .= " $v LIKE '%$v1%' ";//

Чтобы в искомом было "Wapu" И "MAN" И "G" И "90", а не "Wapu" ИЛИ "что-нибудь ещё".

   
 
 автор: cheops   (08.08.2006 в 11:32)   письмо автору
 
   для: Egoist   (08.08.2006 в 06:53)
 

Строку
<?php
$sql 
.= "OR";// 
?>

замените на
<?php
$sql 
.= "AND";// 
?>

   
 
 автор: Egoist   (08.08.2006 в 16:22)   письмо автору
 
   для: cheops   (08.08.2006 в 11:32)
 

Спасибо, но когда меняю, выдает:

Parse error: parse error

   
 
 автор: Egoist   (08.08.2006 в 16:37)   письмо автору
 
   для: cheops   (08.08.2006 в 11:32)
 

Поставил, но оно теперь вообще ничего не находит ;)
Спасибо за помощь, в любом случае.

   
Rambler's Top100
вверх

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