SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.12.2010 09:48:45

hop242
Участник
Зарегистрирован: 24.12.2010
Сообщений: 5

Помогите составить запрос для поиска по БД

Здравствуйте. Столкнулся с проблемой составления регулярного выражения для поиска по базе данных. Необходимо найти все слова, которые начинаются на http и заканчиваются на 0. В идеале исключить в этих словах часть "site". Запрос, составленный мной, вида [[:<:]]http.*0[[:>:]] не работает. Буду благодарен за любую помощь.

Неактивен

 

#2 24.12.2010 16:11:08

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите составить запрос для поиска по БД

Скорее всего, где-то что-то незаэкранировали в приложении: оно работает.

Код:

mysql> select 'http://yandex.ru/0' rlike '[[:<:]]http.*0[[:>:]]';
+----------------------------------------------------+
| 'http://yandex.ru/0' rlike '[[:<:]]http.*0[[:>:]]' |
+----------------------------------------------------+
|                                                  1 |
+----------------------------------------------------+
1 row in set (0.00 sec)

Неактивен

 

#3 24.12.2010 18:21:49

hop242
Участник
Зарегистрирован: 24.12.2010
Сообщений: 5

Re: Помогите составить запрос для поиска по БД

paulus написал:

Скорее всего, где-то что-то незаэкранировали в приложении: оно работает.

Спасибо за ответ. Я имел ввиду, что выражение не работает так как хотелось бы, то есть оно находит строки со всеми словами содержащими "http" и "0", а нужно найти только слова с "http" в начале и "0" в  конце. Подскажите, пожалуйста, как нужно скорректировать данное выражение для правильной работы?

Отредактированно hop242 (24.12.2010 18:22:54)

Неактивен

 

#4 24.12.2010 20:18:10

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите составить запрос для поиска по БД

Попробуйте написать класс символов, который подходит под URL.
http[:/a-zA-Z0-9_\-]+0 — что-нибудь такое.

Неактивен

 

#5 27.12.2010 08:03:48

hop242
Участник
Зарегистрирован: 24.12.2010
Сообщений: 5

Re: Помогите составить запрос для поиска по БД

Еще раз спасибо за помощь. К сожалению, запрос по Вашему примеру выдает очень много лишних ответов. Я правильно понимаю, что синтаксис не позволяет сделать запрос со строгим ограничением (привязкой) по началу и концу искомого слова?

Неактивен

 

#6 27.12.2010 11:25:18

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите составить запрос для поиска по БД

Смотря что Вы называете словом smile

Напишите примеры того, что должно попадать, а что должно не попадать.

Неактивен

 

#7 28.12.2010 02:27:50

hop242
Участник
Зарегистрирован: 24.12.2010
Сообщений: 5

Re: Помогите составить запрос для поиска по БД

paulus написал:

Смотря что Вы называете словом smile

Насколько я понял в MySQL словом является последовательность любых непрерывных символов.

paulus написал:

Напишите примеры того, что должно попадать, а что должно не попадать.

Нужно найти все слова (веб адреса) начинающиеся на http или h и имеющие на конце 0. Хотелось бы исключить веб адреса где 0 не является последним символом слова.

Неактивен

 

#8 28.12.2010 16:07:28

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите составить запрос для поиска по БД

Если Вы — MySQL, то странно, что Вы не знаете, как писать в себе регулярные
выражения. Важно не что MySQL подразумевает под словом, а что подразуме-
ваете Вы.

Код:

[silentia] root test > select txt, concat(txt, " ") rlike 'http[:/a-zA-Z0-9_\.\-]+0[[:space:]]' matches from urls;
+--------------------------------------+---------+
| txt                                  | matches |
+--------------------------------------+---------+
| begin http://yandex.ru/0 end         |       1 |
| begin http://yandex.ru/1 end         |       0 |
| begin http://yandex.ru/01 end        |       0 |
| begin http://yandex.ru0 end          |       1 |
| begin http://www0.othersite.com0 end |       1 |
| begin http://www0.othersite.com9 end |       0 |
| begin http://a/b/c/d end             |       0 |
| begin http://a/b/c/d0 end            |       1 |
+--------------------------------------+---------+
8 rows in set (0.00 sec)

Обратите внимание, что я немного схитрил с пробелом в конце, можно попробовать
поиграть с концом строки.

Неактивен

 

#9 14.01.2011 14:22:42

hop242
Участник
Зарегистрирован: 24.12.2010
Сообщений: 5

Re: Помогите составить запрос для поиска по БД

Запрос сработал, удалось найти необходимые слова и понять логику составления запросов в БД. Спасибо.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson