16:51 

Проблема с выводом поиска из БД

Masque
Cherka Trova
Исходные данные:
Есть таблица с полями id (int), name (varchar) и text (text).
Пользователь вводит поисковый запрос $line.
Этот запрос обеззараживается и подсовывается в SELECT * FROM `table` WHERE `name` LIKE '%$line%' OR `text` LIKE '%line%'
В принципе ничего сложного (полнотекстовый поиск использовать не стал, не так уж велика таблица, да и сам текст там не больше двух-трех строк).

Но вот потребовалось вывести не только id и name, но еще и некую область текста, которая попала под условия поиска. В том-то и вопрос, как это сделать?

@темы: MySQL, PHP

Комментарии
2011-10-03 в 17:10 

alhames
alhames.ru
Знакомая ситуация )
Я тупо потом в цикле прогонял через регулярку и выделял найденные слова.

2011-10-03 в 17:13 

Masque
Cherka Trova
просто выводить весь текст описания как-то не хочется. Вариант вывести одно предложение от точки до точки, но я щас регулярку не соображу. Поможешь?

2011-10-03 в 17:54 

Masque
Cherka Trova
Вот, что у меня получилось:
$preg = "/(\.[^\.]*)(".$line."[\w*])([^\.]*\.)/i";
Но что-то мне подсказывает, что можно изящнее.

2011-10-03 в 18:14 

alhames
alhames.ru
ну можно так попробовать:
$preg = '#\.(.*?' . $line . '.*?\.)#si';
Сути дела не меняет..

Еще можно искать позицию с помощью strpos, а потом откусывать спереди и сзади определенное количество символов и дополнять многоточием если это не начало/конец текста - тогда будет нагляднее.

2011-10-04 в 09:16 

Masque
Cherka Trova
alhames, осталась одна загвоздка. Левым ограничителем кроме точки надо сделать начало строки, поскольку искомый кусок может быть в первом предложении новой строки.
$preg = '#[^|\.](.*?' . $line . '.*?\.)#si'; - почему-то не срабатывает, или я что-то не так пишу?

2011-10-04 в 09:20 

alhames
alhames.ru
Символ ^ внутри квадратных скобок означает отрицание. Т.е. по сути [^|\.] эквивалентно "один любой не символ" - т.е. он ничего не найдет.
Поэтому: '#(^|\.)(.*?' . $line . '.*?(\.|$))#si'
И выбираешь, соответственно, не 1й а второй карман.

     

@web-программирование

главная