Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск по нескольким ключевым словам. Помогите дополнить мой скрипт, плииз! 
V
    Опции темы
Splendid
Дата 14.9.2007, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 1.8.2007
Где: Беларусь, Минск

Репутация: нет
Всего: нет



Есть скрипт поиска, ищет по одному слову, надо, чтобы искал по нескольким. И чтобы выводил не всю найденную инфу, а часть текста, где встречается ключевое слово (слова)
Не могу исправить... 



Код


error_reporting(E_ALL);
include "config.php";
include "query.php";

//Введенное пользователем значение
$search = mysql_real_escape_string($_REQUEST['search']);
//режем строку
$search = substr($search, 0, 64);
//разрешим искать только по словам, которые длиннее двух букв
$search = trim(preg_replace("/\s(\S{1,2})\s/", " ", ereg_replace(" +", "  "," $search ")));
// убираем знаки препинания и цифры
$search=eregi_replace ('[.?,!()#":;|]', '', $search);
//чтобы обработать каждое слово
//фразу $search разбиваем на отдельные слова?????
$search_array=explode(" ", $search);
$search_num=(integer)count($search_array);
//Замена нескольких пробелов на один: 
$search=ereg_replace(" +"," ",$search);
//Удаление лишних пробелов по-левому и правому боку текста:
$search=trim($search);
//экранируем данные
$search=addslashes($search);
//заменим один слеш на два
$search=str_replace('\\','\\\\',$search);
//прослешиваем: 
$search=mysql_real_escape_string($search);
//чтобы _ и % соответствовали точно самим себе
$search=addCslashes($search, '_%');

$sql = "SELECT $table_columns_list FROM $table_unique_list WHERE 

($reference_list) AND ( 1=2 "; 
for ($i=0; $i < count($table_columns); $i++) {
$sql .= ' or ' . $table_columns[$i] . " LIKE '%$search%'";
} 
$sql = "$sql)"; 
//echo $sql;
// Общее количество информации 
$count = mysql_num_rows(mysql_query($sql)); 

//echo $count;
if ($count == 0)
{
  echo "<br>Вы искали '$search'. Поиск не дал результатов. 
            Попробуйте изменить критерии поиска.</br>";
 }
elseif ($count > 0)
{
echo "</br>"; 
echo "Вы искали '$search'. Найдено $count документов.";

// Вывод информации из базы данных  
echo "</br>";
$sql.=' LIMIT '.$start_pos.', '.$perpage;
$result = mysql_query($sql) or die('Error!'); 
echo "<table border=1>";
  echo "<tr>";
 for ($i=0; $i < count($columns_en); $i++)
{
 echo "<td>$columns_rus[$i]</td>";
}
while ($row = mysql_fetch_array($result)) 
{ 
for ($i=0; $i < count($columns_en); $i++)

   {
   echo "<td>".$row[$columns_en[$i]] = preg_replace("/($search)/i", "<span style='color: red; font-weight: bold;'>\\1</span>", $row[$columns_en[$i]]).
"&nbsp;</td>";  
   }   

echo "</tr>"; 
}
echo  "</table>";
} }
elseif ($search == '')
{
  echo " <br> Вы ничего не ввели в окно поиска или ввели слово короче 3-ёх букв.
   Пожалуйста, повторите ввод. </br>";
}
?>


Добавлено через 1 минуту и 8 секунд
Помогите, пожалуйста!!!!!
PM MAIL   Вверх
ewolf
Дата 14.9.2007, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

Репутация: 2
Всего: 18



У тебя же уже строка поиска разбивается на отдельные слова

Код

$search_array=explode(" ", $search);
$search_num=(integer)count($search_array);


вот и ищи по ним

Код

$words_search = array();
foreach( $search_array as $word )
   $words_search[] = "(field LIKE '%{$word}%'";

$query = "SELECT * FROM table WHERE ".implode('OR', $words_search)." ";



Там у тебя поиск по нескольким полям - значит объедени приведенный мной пример с твоим.

Выделить из текста участок, обрамляющий твое слово можно примерно таким регулярным выражением:

Код

$str = preg_replace('/(.{0,30})(word1|word2)(.{0,30})/', '...$1$2$3...', $str)




PM MAIL ICQ   Вверх
Splendid
Дата 17.9.2007, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 1.8.2007
Где: Беларусь, Минск

Репутация: нет
Всего: нет



Цитата

У тебя же уже строка поиска разбивается на отдельные слова


это я знаю, только вот этого ж мало

спасибо, пойду пробовать.
PM MAIL   Вверх
Splendid
Дата 19.9.2007, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 1.8.2007
Где: Беларусь, Минск

Репутация: нет
Всего: нет



Спасибо, все получилось, тему можно закрыть
PM MAIL   Вверх
Splendid
Дата 19.9.2007, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 1.8.2007
Где: Беларусь, Минск

Репутация: нет
Всего: нет



хотя нет....с поиском по нескольким словам получилось, а вот с выводом части текста нет:


есть текст, допустим:
 
$str = "используются в условии LEFT JOIN. Все условия перемещаются в предложение WHERE.";

есть регулярное выражение:

$str = preg_replace("/(.{0,10})(LEFT)(.{0,10})/", "...$1$2$3...", $str);

Оно выводит: используются ...в условии LEFT JOIN. ...Все условия перемещаются в предложение WHERE.

Как сделать так, чтобы выводило: ...в условии LEFT JOIN. Все ...

и чтобы

$str = preg_replace("/(.{0,10})(LEFT|условия)(.{0,10})/", "...$1$2$3...", $str);

выводило: ...в условии LEFT JOIN. Все ... ...JOIN. Все условия перемещают...

????? Помогите, пожалуйста!
PM MAIL   Вверх
sTa1kEr
Дата 19.9.2007, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 9
Всего: 146



Цитата(Splendid @  19.9.2007,  13:07 Найти цитируемый пост)
хотя нет....с поиском по нескольким словам получилось, а вот с выводом части текста нет

Я думаю в этой теме http://forum.vingrad.ru/forum/topic-162790.html как-раз то, что вам нужно.
PM MAIL   Вверх
Splendid
Дата 19.9.2007, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 1.8.2007
Где: Беларусь, Минск

Репутация: нет
Всего: нет



sTa1kEr, СПАСИБО!
PM MAIL   Вверх
Splendid
Дата 20.9.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 1.8.2007
Где: Беларусь, Минск

Репутация: нет
Всего: нет



всем спасибо, тему можно закрыть!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0526 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.