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

Форум MySQL

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

 

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

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

тема: поиск по базе данных
 
 автор: neo   (16.08.2005 в 23:05)
 
 

Допустим я делаю поиск по сайту. Скрипт находит в тексте слово и теперь я хочу вывести на экран это слово и еще два слова, стоящих перед найденным и пять после. Как это сделать.

   
 
 автор: cheops   (16.08.2005 в 23:20)   письмо автору
 
   для: neo   (16.08.2005 в 23:05)
 

А слово чем ищите регулярными выражениями или ещё чем, не могли бы вы привести алгоритм поиска? Может проще прямо во время поиска вырезать информацию?

   
 
 автор: neo   (16.08.2005 в 23:40)
 
   для: cheops   (16.08.2005 в 23:20)
 


$result = db_query("SELECT * FROM ".CONTENT_SITE.";") or die (db_error());
while ($row = db_fetch_row($result)){
        if(stristr("$row[8]", "$word")){
        $substr_count = substr_count("$row[$i]","$word[$q]");
        $sort[$row[$i]]=$estimation*$substr_count;
}

$row[8] - это большой длок текста.
Я ещё вот, что хотел узнать. В теме "поиск по сайту..." написаны функции для поиска слов в базах данных mysql. Такой вопрос: они чувствительны к ригистру или нетю И где о них можно узнать по подробней. Мне какую-нибудь ссылку, где есть все про mysql.

   
 
 автор: cheops   (17.08.2005 в 01:11)   письмо автору
 
   для: neo   (16.08.2005 в 23:40)
 

Нет, в MySQL строки не чувствительны к регистру, если не указывается специальное слово BINARY и не используется тип BLOB для хранения строк.

   
 
 автор: neo   (17.08.2005 в 01:20)
 
   для: cheops   (17.08.2005 в 01:11)
 

Вы не ответели на предыдущие вопросы. И еще как вы думаете может мне стоит мндексировать каждое слово отдельно, т.е. в отдельную строку в mysql, а потом средствами mysql искать слова. Но я думаю база данных будет огромная. Как это отразится на скорости поиска. Простите за ошибки в выше приведенном коде.

   
 
 автор: cheops   (17.08.2005 в 01:25)   письмо автору
 
   для: neo   (17.08.2005 в 01:20)
 

Думаю вам нужно воспользоваться типом TEXT и проиндексировать каждый столбец индексом FULLTEXT, а далее искать информацию при помощи полнотекстового поиска - так получится проще и быстрее.

   
 
 автор: cheops   (17.08.2005 в 01:23)   письмо автору
 
   для: neo   (16.08.2005 в 23:40)
 

>И где о них можно узнать по подробней. Мне какую-нибудь ссылку, где есть
>все про mysql.

Вы можете воспользоваться русским манулом, который доступен на официальном сайте MySQL
http://dev.mysql.com/doc/mysql/ru/index.html
Если вы его хотите скачать к себе на машину - посмотрите тему http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=4513, а то часто бывает путаница с ним.

PS Он не много устаревший, местами даже много, но для начала самое оно - начинайте с третьей главы - там отличный турториал, я в своё время именно с него и начинал своё знакомство с MySQL.

   
 
 автор: neo   (17.08.2005 в 00:33)
 
   для: neo   (16.08.2005 в 23:05)
 

И еще как вы думаете может мне стоит мндексировать каждое слово отдельно, т.е. в отдельную строку в mysql, а потом средствами mysql искать слова. Но я думаю база данных будет огромная. Как это отрахится на скорости поиска. Простите за ошибки в выше приведенном коде.

   
 
 автор: cheops   (17.08.2005 в 01:15)   письмо автору
 
   для: neo   (17.08.2005 в 00:33)
 

Дело в том, что в MySQL имеется полнотекстовый поиск, т.е. она сама может индексировать ключевые слова и действует это не плохо, именно им мы пользуемся для поиска на данном форуме. Это конечно требует затрат на жёстком диске, но они в полне терпимые (объём возрастает в два раза).
При поиске по MySQL можно следовать двумя путями,
1) либо воспользоваться полнотекстовым поиском по полям типа TEXT проиндексированных индексом FULLTEXT
2) либо отталкиваться от операторов LIKE и REGEXP
Вот как мне кажется наиболее интересные темы по поиску:

http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=514
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=148
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=807
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=5311

Я думаю вам будет интересно их почитать, если у вас появятся вопросы - вы можете их смело задавать, только лучше в виде отдельной темы в соответствующем разделе http://www.softtime.ru/forum/index.php?id_forum=3 - постараемся вам обязательно помочь.

   
 
 автор: neo   (17.08.2005 в 02:00)
 
   для: cheops   (17.08.2005 в 01:15)
 

Извините пожалуйста но первоначальный вопрос, на который вы так и не ответили, не совсем подходит к форуму mysql - Я делаю поиск по сайту. Скрипт находит в тексте слово и теперь я хочу вывести на экран это слово и еще два слова, стоящих перед найденным и пять после. Как это сделать.

$result = db_query("SELECT * FROM ".CONTENT_SITE.";") or die (db_error()); 
while ($row = db_fetch_row($result)){ 
        if(stristr("$row[8]", "$word")){ 
        а сдесь должна быть функция вывода текста
    }
}

$ text - большой блок текста

   
 
 автор: cheops   (17.08.2005 в 02:57)   письмо автору
 
   для: neo   (17.08.2005 в 02:00)
 

Сложно ответить без структуры таблицы, значения CONTENT_SITE, того, какую роль играет $text (в коде его нет). Нужно больше информации.

   
 
 автор: neo   (17.08.2005 в 21:14)
 
   для: cheops   (17.08.2005 в 02:57)
 

Вот структура базы данных:

db_query("CREATE TABLE ".CONTENT_SITE." (id INT, id_url INT, url VARCHAR(255), title TEXT, meta_tags TEXT, h_tags TEXT, strong_tags TEXT, u_tags TEXT, content TEXT)") or die (db_error());

Извините не $ text, а $row[8] - большой блок текста.
И у меня тут возник еще один дополнительный вопрос:
В smarty есть модификатор truncate - обрезает переменную по указанной длине, во 2-ом параметре указывается текст, который надо добавить в конец строки, функция будет пытаться вырезать слово. Есть ли подобная функция в php.

   
 
 автор: cheops   (18.08.2005 в 02:50)   письмо автору
 
   для: neo   (17.08.2005 в 21:14)
 

Попробуйте воспользоваться скриптом
<?php
  preg_match
("|([\w]+[\s]+){2}".$word."([\s]+[\w]+){5}|i",$row[8],$out);
  echo 
$out[0];
?>

   
Rambler's Top100
вверх

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