![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Serebrus |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 333 Регистрация: 22.5.2007 Где: Ташкент Репутация: нет Всего: нет |
Привет всем.
Допустим что имеем несколько строк: 1. новый предмет 2. в универмаге продоется все 3. я поступил в магистратуру и т.д. Если мы зададим запрос
то, будем иметь строки: в универмаге продоется все я поступил в магистратуру Как можно извлеч из строки только то слово, которое включает в себе заданный отрывок т.е. "маг"? 1. универмаге 2. магистратуру |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
никак. в mysql "из коробки" нет ни аналога preg_replace, ни preg_match.
потому либо искать сторонние UDF для mysql, а потом подключать/просить хостера подключить(маловероятно, что пойдут навстречу). либо же все же реализовать "вырезку" средствами клиентского языка(PHP или что там у тебя) |
|||
|
||||
| Serebrus |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 333 Регистрация: 22.5.2007 Где: Ташкент Репутация: нет Всего: нет |
skyboy, что скажете на такой подход...
1. Задаем запрос как обычно (...where `str` like '%маг%') 2. с помощью explode разбиваем результативные строки в массив 3. с помощью substr_count, в цикле проверяем на наличие заданного отрывка в элементе массива 4. и если substr_count>0 то, добавляем этот элемент в список. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
skyboy, REGEXP - это стороннее UDF ?
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
ksnk, regexp не позволяет вычленить совпадающую часть(в РНР- preg_match), ни заменить(preg_replace). только возвращает true/false.
Как тут при помощи оператора REGEXP выдернуть полностью слово? Добавлено через 3 минуты и 59 секунд lib_mysqludf_preg - вот что я понимаю под сторонней udf, реализующей поиск и замену по регуляркам. |
|||
|
||||
| Serebrus |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 333 Регистрация: 22.5.2007 Где: Ташкент Репутация: нет Всего: нет |
skyboy,
сработала. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
skyboy, opps! недочитал вопрос...
Serebrus, Еще решение - можно побить строки на слова. Работа одноразовая, так что можно и вручную... на PHP. Получится табличка [ID,WORD], где ID - неуникальный индекс из оригинальной таблицы, WORD - слово. В ней уже можно и поискать слова like'ом. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |