Регулярное выражение в Mysql

12
K
На сайте с 08.04.2010
Offline
89
#11

А переменная то передается?

Попробуйте в запросе вместо переменной поставить mysite.ru

N
На сайте с 23.01.2008
Offline
74
#12
eugene_o:
А разве нельзя все же написать правильное регулярное выражение?

Вам же ответили, что в SQL нет регулярных выражений. Они там попросту не нужны. БД используется не для этого. Выбирайте данные как есть и разбирайте их в php на части.

eugene_o:
У моей организации данных есть и плюс, если я захочу хранить в этом поле вместо 10 ссылок, 20 или 100, то я могу просто увеличить число полей в форме ввода (одну циферку в цикле) и весь сайт будет это поддерживать.

угу. и Ваш сервер просто умрет. :D советую все же прочитать для чего используются БД.

ps. мусор выбирается до записи в БД, а не после. ;)

bukachuk
На сайте с 07.09.2008
Offline
97
#13
eugene_o:
Можно конечно, НО у меня поле может содержать до 10 ссылок, разделенных переводом строк, т.е. в поле могут быть ссылки с $SITE_DOMEN и без него одновременно. Если бы поле содержало всего одну ссылку, я бы и тему не заводил бы :)

Нужно поле screens выделить в отдельную таблицу и связать с таблицей сайтов, потом спокойно делать выборку по LIKE. То есть нужно избавится от переводов строк, хранить данные через перевод строки в одном поле и потом по ним искать - не самая лучшая идея

Программирование PHP,Mysql (/ru/forum/934470)
EO
На сайте с 10.05.2005
Offline
114
#14
n00ne:
Вам же ответили, что в SQL нет регулярных выражений. Они там попросту не нужны. БД используется не для этого. Выбирайте данные как есть и разбирайте их в php на части.



угу. и Ваш сервер просто умрет. :D советую все же прочитать для чего используются БД.

ps. мусор выбирается до записи в БД, а не после. ;)

Как нет выражений регулярных, а это что тогда:

http://www.tutorialspoint.com/mysql/mysql-regexps.htm

?

---------- Добавлено 10.01.2016 в 11:21 ----------

bukachuk:
Нужно поле screens выделить в отдельную таблицу и связать с таблицей сайтов, потом спокойно делать выборку по LIKE. То есть нужно избавится от переводов строк, хранить данные через перевод строки в одном поле и потом по ним искать - не самая лучшая идея

Над этим вариантом подумывал уже, хранить ссылки в отдельной таблице, с указанием id записи из основной, тогда также будет возможно увеличивать кол-во строк без каких-либо значительных переделок.

Просто там получается, что поиск по этому полю и не идет никогда, на сайте идет поиск по id, а содержимое этого поля просто берется, загоняется в массив на php и выводится. Это я делаю скрипт обслуживания для админа, который запускается от силы раз в месяц, поэтому и не хочу все переписывать из-за одного админского скрипта...

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

---------- Добавлено 10.01.2016 в 11:27 ----------

Kasperaitus:
А переменная то передается?
Попробуйте в запросе вместо переменной поставить mysite.ru

Завтра посмотрю на рабочем компе, уже у самого два сомнения возникли:

- не передается переменная

- переменная передается, но в ней нужно экранировать точку.

Бооольшой портал о мааалом бизнесе (http://www.bizguru.ru/) | Более 1000 бизнес-программ (http://1.44mb.ru) По выходным не работаю - не ищите меня в сети. В понедельник я обычно сам возвращаюсь :)
N
На сайте с 23.01.2008
Offline
74
#15

eugene_o, не совсем понимаю, Вы здесь спрашиваете или хотите что-то доказать? если спрашиваете, то ответ Вам давно дали. все Ваши проблемы - из-за неправильной организации данных. и, как мне кажется, не понимания, зачем вообще нужна БД.

если же все ответы для Вас не верные, а свой вариант Вы считаете единственно верным - разбирайтесь сами.

EO
На сайте с 10.05.2005
Offline
114
#16
n00ne:
eugene_o, не совсем понимаю, Вы здесь спрашиваете или хотите что-то доказать? если спрашиваете, то ответ Вам давно дали. все Ваши проблемы - из-за неправильной организации данных. и, как мне кажется, не понимания, зачем вообще нужна БД.

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

Варианты верные, которые предложены и я их знаю прекрасно, просто хочу решить проблему всего одним regexp, не прибегая к переписыванию кода...

Знаю проблемы своего движка, он написан в 2003 году и это не единственная там проблема, просто задачи сейчас другие...

---------- Добавлено 10.01.2016 в 15:57 ----------

n00ne:
eugene_o,
если же все ответы для Вас не верные, а свой вариант Вы считаете единственно верным - разбирайтесь сами.

Вернее будет сказать: я не знаю как писать regexp, поэтому разбирайтесь без меня.

VHS
На сайте с 28.09.2007
Offline
142
VHS
#17

можно построить монстровидный запрос через substring_index...

А еще заменить mysite.ru на что-то и уже потом искать типа

SELECT * FROM table WHERE replace(screens, 'mysite.ru', '') REGEXP "[\.A-Za-z0-9\-]+\\.[a-zA-Z]{2,4}"

Регулярку сам донастроишь

EO
На сайте с 10.05.2005
Offline
114
#18
VHS:
можно построить монстровидный запрос через substring_index...
А еще заменить mysite.ru на что-то и уже потом искать типа

SELECT * FROM table WHERE replace(screens, 'mysite.ru', '') REGEXP "[\.A-Za-z0-9\-]+\\.[a-zA-Z]{2,4}"

Регулярку сам донастроишь

Интересно как, вот и регулярные выражения нашлись в mysql, спасибо, уже есть куда копать!

---------- Добавлено 11.01.2016 в 07:48 ----------

Вот такой вариант работает, как ни странно:

SELECT * FROM table WHERE replace(screens, 'http://www.mysite.ru', '') REGEXP 'http://'

Результаты:

Отображает строки 0 - 4 (5 всего, запрос занял 0.0605 сек.)

Поиск производился по 10315 строкам.

Меня вполне устраивает результат! Учитывая, что скрипт будет запускаться пару раз в месяц, а то и реже.

Вообще идеально решение!

Может что еще не учел..., но пока не вижу проблем абсолютно с этим запросом!

---------- Добавлено 11.01.2016 в 07:49 ----------

Спасибо всем за предложенные решения!

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий