Делаю поиск. В результате показать искомую строку + по 10 символов до и после из поля

BeatBox

Guest
Делаю поиск. В результате показать искомую строку + по 10 символов до и после из поля

Здравствуйте. Я делаю себе на сайт посик, уже сделал впринципе.. точнее не я сделал и делаю из уже готового скрипта. Так вот - немогу сделать так, чтобы при показе результатов мне вывело помимо всего прочего (ссылка, дата и т.п. - это готово уже) - чтобы вывело кусок текста, где встретился $query.
Ну например запрос - "описать суть", в БД в поле это имеет значение - "Постарайтесь наиболее четко описать суть вопроса (короткое название, перечисление функций без вопроса приведут к удалению вашего сообщения) " и мне тогда нужно чтобы в резултатах поиска показало что-то вроде:
"... наиболее четко описать суть вопроса (короткое название...."
Помогите, пожалуйста. Какой функцией это нужно осуществить?
 

BeatBox

Guest
Сижу читаю, но немонимаю :(
Вт например
$query - то искомый текст,
он встречаеться в таблице text
$text = $row['text'];

тоесть $query встречаеться в $text. Вот как вывести кусок text , где встретился $query + по 10-15 знаков до и после совпадения $query?
 

BRat

o_0
по границам слов я так понимаю нужно будет обрезать. Если хочешь сразу и БД извлекать обрез, почитай про ]REGEXP (в mysql), если нет тогда [m]preg_match[/m
 

BeatBox

Guest
Хотя ещё проще -
как вывести содержание $text до первой точки?

-~{}~ 21.03.05 02:18:

тоесть из "ффбб аа вы. у к авыа а. аыва ваыыв" то выведет
"ффбб аа вы"?

-~{}~ 21.03.05 02:25:

Помогите пожалуста , все-таки по первому вопросу..сам немогу..неполучаеться. Может тко-то делал уже и сможет показать на примере? Буду очень благодарен!
 

SelenIT

IT-лунатик :)
BeatBox
Вот тебе вариант ответа на первый вариант вопроса
PHP:
preg_match("/\b.{0,23}".preg_quote($query,'/').".{0,23}\b/",$text,$fragment);
echo '...'.$fragment[0].'...';
Величина 23 символа в качестве верхнего предела подобрана экспериментально для соответствия с примером из твоего первого поста :)
Нижний предел равен нулю, т.к. искомый фрагмент может оказаться в самом начале/конце текста.
Чуть не забыл - в искомом фрагменте может встретиться спецсимвол регулярных выражений или ограничитель (/), поэтому нужен [m]preg_quote[/m].

Ответ на второй вариант вопроса:
PHP:
echo substr($text, 0, strpos($text, '.'));
 

BeatBox

Guest
SelenIT
спасибо большое! Первый вариант работает отлично, со вторым у меня неполучаеться, но это неважно - так как первый гораздо важнее.

Можно ещё вопросик по поиску: вот есть ограничения (взято из статьи на этом сайте):
PHP:
$query = substr($query, 0, 40);
$query = preg_replace("/[^\w\x7F-\xFF\s]/", " ", $query);
$query = trim(preg_replace("/\s(\S{1,2})\s/", " ", ereg_replace(" +", "  "," $query ")));
$query = ereg_replace(" +", " ", $query);
получаеться что убираються все теги и символы из $query, нос этим проблема - нужно чтобы оставило символы-разделители (-,.)
Как это сделать? ячто-то вообще не понимаю что нужно писать в скобках preg_replace так как непонимаю вообще что там за что отвечает :(
 

BeatBox

Guest
Все спасибо за ответы!
Есть ещё вопрос (думаю, по поиску это последний)
у меня поиск производиться комаандой
select from table where field like '%$query%'

Хотелось бы сделать так, чтобы искалось не полностью $query
а например части $query. Тесть если я сейчас введу в поиск
"тапки халаты" а в БД оно в виде "продаем тапки и залаты" - то результаты поиска будут нулевые :(

пс
Тапки и халаты не продаю :D
 

Фанат

oncle terrible
Команда форума
разбиваешь свою кверю на слова и ищешь лайк по каждому
where field like '%$word1%' AND field like '%$word2%' ...
 

BeatBox

Guest
а как разбить на слова? и как узнать сколько слов всеего в запросе?
 

Фанат

oncle terrible
Команда форума
а как разбить на слова?
чувак.
ты уже освоил волшебную функцию split
как ты думаешь - что она делает? Дома строит?
или, может быть, всё-таки, делит строку по определённым правилам?
только пользоваться надо её продвинутым вариантом - preg_split
о том, как им пользоваться, написано вот здесь: PHP FAQ: Регулярные выражения.

Хотя по первости можешь воспользоваться примитивной explode
 

BeatBox

Guest
А вы немогли бы, пожалуйста, показать на примере? Я по мануалам этим всем очень туго понимаю :(
вот например разбить $query?
 

Фанат

oncle terrible
Команда форума
BeatBox

[m]explode[/m] - ТАМ ЕСТЬ ПРИМЕР
если ты по мануалам не очень - это повод учиться пользоваться мануалом. а не просить всё время написать за тебя код.
 

BeatBox

Guest
ок вот например я разобью сплитом, а как птом мне узнать скольк получилось слов и как запрос построить? ведь если напишу
where filed like $word1 and where filed like $word2 and where filed like $word3 and
а всего два слова в запросе - то будет ошибка :(
 

Фанат

oncle terrible
Команда форума
BeatBox, сслушай, ну изучил бы ты хотя бы основы программирования, а? Ну купи себе книжку по информатике для 10 класса! почитай - что такое ЦИКЛЫ!
что такое МАССИВЫ.

Ну пойми ты, что здесь не курсы обучения программированию с нуля! Здесь могут помочь решить специфические проблемы.
но если ты не можешь воспользоваться ответом, в силу того, что тебе незнакомо программирование вообще - тебе форум бесполезен. Научись составлять ххотя бы элементарные программы!

Размер массива неотъемлем от массива! узнать его - пара пустяков. Если знать, что такое массив.
Да и не нужен от небе вовсе. такая строка запроса составляется в ЦИКЛЕ. пойди почитай, что это такое.

[m]foreach[/m]

-~{}~ 21.03.05 11:42:

читай: http://phpfaq.ru/php5.ru/study/chapter3.html
 

BeatBox

Guest
Фанат
за все ссылки огромное спасибо!
но по вопросу - ничего неполучаеться..сижу бешусь по-тихонь ку :(
вот что-то слеп ил из примеров:
PHP:
$keywords = explode(" ", $query);
$arr = $keywords;
//reset($arr);
while (list(, $value) = each($arr)) {
   $query .= " or $value";
}
echo "$keywords";
в итоге мне ничего не разделает а просто дублирует..тоесть если в поиск пишу
"ааа" то мне выдает "ааа or aaa"
 

Фанат

oncle terrible
Команда форума
о господи.
это ж надо быть таким неудачливым чучелком.
что у тебя в квери, бесноватый ты мой?
с какой радости ты выташил этот вайл, когда тебе велели использовать FOREACH. Сейчас я большими буквами написал - тебе видно? Дома кто-нибудь есть?
 
Сверху