- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте!
Просьба помочь с регулярным выражением в mysql.
Есть поле screens, в котором могут содержаться до 10 ссылок, разделенных переводами строк.
Нужно найти строки в базе, у которых в этом поле присутствуют ссылки (от 1 до 10), не содержащие мой домен $SITE_DOMEN.
Вот такой запрос я написал:
Также еще нужно учесть, что www. - тоже необязательно будет в таких ссылках.
Мой запрос ничего не находит для вот такого значения поля screens и подобных:
Как правильно написать регулярное выражение?
SELECT * FROM table WHERE screens REGEXP 'http://www\.[^($SITE_DOMEN)]+'
Ну как же вы документацию то не прочитали ?
В mysql другой синтаксис регулярных выражений более старый - posix.
Вы пытаетесь использовать perl-синтаксис.
Ну как же вы документацию то не прочитали ?
В mysql другой синтаксис регулярных выражений более старый - posix.
Вы пытаетесь использовать perl-синтаксис.
А никак я ее не читал, честно говоря, знаю PHP, сегодня впервые столкнулся с тем, что нужно регулярное выражение в mysql использовать, нашел пару примеров в сети + свои знания PHP, так и написал.
Не смог найти примера с моей ситуацией когда нужно найти отрицание слова....
Поэтому прошу помощи, подскажите, где ошибки?
---------- Добавлено 09.01.2016 в 15:02 ----------
А в документации написано:
я так и написал: [^($SITE_DOMEN)] все кроме слова, к квадратных скобках...
А обязательно REGEXP?
Можно LIKE
А обязательно REGEXP?
Можно LIKE
Можно конечно, НО у меня поле может содержать до 10 ссылок, разделенных переводом строк, т.е. в поле могут быть ссылки с $SITE_DOMEN и без него одновременно. Если бы поле содержало всего одну ссылку, я бы и тему не заводил бы :)
Я бы все эти строки растащил по строкам таблицы
Я бы все эти строки растащил по строкам таблицы
Это все понятно, но когда движок давно сделан., не хочется переписывать в 10-30 местах и потом глюки еще ловить полголда..
Может это не самое лучшее решение в движке, но работает надежно и не хочется терять эту надежность.
В таком случае напишите хотя бы как у вас
выглядит для нескольких записей.Можно конечно, НО у меня поле может содержать до 10 ссылок, разделенных переводом строк, т.е. в поле могут быть ссылки с $SITE_DOMEN и без него одновременно. Если бы поле содержало всего одну ссылку, я бы и тему не заводил бы :)
единственный способ найти - это как указано выше not like %site%. у Вас не правильная организация данных. отсюда и такие сложности. поиск происходит по записям, а не по Вашим строкам. ;)
это как указано выше not like %site%
При таком подходе ТС получит записи где в поле screens нет урла его сайта. Но такой запрос не дает гарантию что там вообще есть какие-то ссылки. А унего стоит задача
в этом поле присутствуют ссылки (от 1 до 10), не содержащие мой домен $SITE_DOMEN.
Я бы делал проверку на уровне PHP - там возможности шире чем у мускула
единственный способ найти - это как указано выше not like %site%. у Вас не правильная организация данных. отсюда и такие сложности. поиск происходит по записям, а не по Вашим строкам. ;)
А разве нельзя все же написать правильное регулярное выражение?
Понимаю, что не самая лучшая организация данных, но как и писал выше, не вижу смысла переписывать в 30 местах код чтобы избежать одного регулярного выражения. У моей организации данных есть и плюс, если я захочу хранить в этом поле вместо 10 ссылок, 20 или 100, то я могу просто увеличить число полей в форме ввода (одну циферку в цикле) и весь сайт будет это поддерживать.
---------- Добавлено 10.01.2016 в 06:15 ----------
При таком подходе ТС получит записи где в поле screens нет урла его сайта. Но такой запрос не дает гарантию что там вообще есть какие-то ссылки. А унего стоит задача
Я бы делал проверку на уровне PHP - там возможности шире чем у мускула
Задача стоит найти поля, где есть ссылки не моего сайта, которые могут соседствовать со ссылками моего сайта.
Насчет php думал уже, если не смогу так решить проблему, придется на php проверять... Просто скрипт будет неэффективно работать получается, будет находить в базе все подряд, а потом выводить лишь некоторые строки.
Нашел онлайн тестер, в нем работает мое выражение...странно: http://sqlfiddle.com/#!2/01bb39/1