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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: поиск по базе данных

Сообщения:  [1-10]   [11-13] 

 
 автор: 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];
?>

   
 
 автор: 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   (17.08.2005 в 02:57)   письмо автору
 
   для: neo   (17.08.2005 в 02:00)
 

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

   
 
 автор: 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 в 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 в 01:20)
 
   для: cheops   (17.08.2005 в 01:11)
 

Вы не ответели на предыдущие вопросы. И еще как вы думаете может мне стоит мндексировать каждое слово отдельно, т.е. в отдельную строку в 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 - постараемся вам обязательно помочь.

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

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

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

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

   

Сообщения:  [1-10]   [11-13] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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