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 ----------Спасибо всем за предложенные решения!
Я здесь спрашиваю, как правильно написать regexp, если вы еще не поняли..., а не как правильно переделать весь сайт. Я знаю для чего нужна БД, а также знаю про рациональное использование времени - можно тысячу раз вылизывать код и иметь тот же функционал или можно не тратить зря время на идеально правильную структуру, когда можно это время потратить на более важные в данный момент вопросы.
Варианты верные, которые предложены и я их знаю прекрасно, просто хочу решить проблему всего одним regexp, не прибегая к переписыванию кода...
Знаю проблемы своего движка, он написан в 2003 году и это не единственная там проблема, просто задачи сейчас другие... ---------- Добавлено 10.01.2016 в 15:57 ----------
Вернее будет сказать: я не знаю как писать regexp, поэтому разбирайтесь без меня.
Как нет выражений регулярных, а это что тогда:
http://www.tutorialspoint.com/mysql/mysql-regexps.htm
?---------- Добавлено 10.01.2016 в 11:21 ----------
Над этим вариантом подумывал уже, хранить ссылки в отдельной таблице, с указанием id записи из основной, тогда также будет возможно увеличивать кол-во строк без каких-либо значительных переделок.
Просто там получается, что поиск по этому полю и не идет никогда, на сайте идет поиск по id, а содержимое этого поля просто берется, загоняется в массив на php и выводится. Это я делаю скрипт обслуживания для админа, который запускается от силы раз в месяц, поэтому и не хочу все переписывать из-за одного админского скрипта...
К сожалению, здесь никто не может вразумительно ответить как правильно писать выражения для regexp, а советуют любые пути обхода этого...---------- Добавлено 10.01.2016 в 11:27 ----------
Завтра посмотрю на рабочем компе, уже у самого два сомнения возникли:
- не передается переменная
- переменная передается, но в ней нужно экранировать точку.
А разве нельзя все же написать правильное регулярное выражение?
Понимаю, что не самая лучшая организация данных, но как и писал выше, не вижу смысла переписывать в 30 местах код чтобы избежать одного регулярного выражения. У моей организации данных есть и плюс, если я захочу хранить в этом поле вместо 10 ссылок, 20 или 100, то я могу просто увеличить число полей в форме ввода (одну циферку в цикле) и весь сайт будет это поддерживать.---------- Добавлено 10.01.2016 в 06:15 ----------
Задача стоит найти поля, где есть ссылки не моего сайта, которые могут соседствовать со ссылками моего сайта.
Насчет php думал уже, если не смогу так решить проблему, придется на php проверять... Просто скрипт будет неэффективно работать получается, будет находить в базе все подряд, а потом выводить лишь некоторые строки.
Нашел онлайн тестер, в нем работает мое выражение...странно: http://sqlfiddle.com/#!2/01bb39/1
Это все понятно, но когда движок давно сделан., не хочется переписывать в 10-30 местах и потом глюки еще ловить полголда..
Может это не самое лучшее решение в движке, но работает надежно и не хочется терять эту надежность.
SELECT * FROM table WHERE screens NOT LIKE '%$SITE_DOMEN%'
Можно конечно, НО у меня поле может содержать до 10 ссылок, разделенных переводом строк, т.е. в поле могут быть ссылки с $SITE_DOMEN и без него одновременно. Если бы поле содержало всего одну ссылку, я бы и тему не заводил бы :)
Зная какие крупные ребята, сидят в этой этой нише, я бы даже не полез бы в это...
Для меня знакомства - это одна из тем, куда обычным вебмастерам вход давно закрыт.
Ну а если у вас миллионы, хватит денег на тв рекламу и т.п., как говорили выше, то можно пробовать...
А своими ботами и левыми юзерами, может вы и нагоните человек 500 туда реальных - это ничто для такого сайта.
После этого он не заведется, а просто заглохнет...
А никак я ее не читал, честно говоря, знаю PHP, сегодня впервые столкнулся с тем, что нужно регулярное выражение в mysql использовать, нашел пару примеров в сети + свои знания PHP, так и написал.
Не смог найти примера с моей ситуацией когда нужно найти отрицание слова....
Поэтому прошу помощи, подскажите, где ошибки?---------- Добавлено 09.01.2016 в 15:02 ----------А в документации написано:
я так и написал: [^($SITE_DOMEN)] все кроме слова, к квадратных скобках...
$s='http://programma-biserok.ru/СКРИНШОТЫ/Схема целиком.png'; $url = parse_url($s); $arr = explode('/', $url{'path'}); // {} ЗАМЕНИТЬ на квадратные скобки, грёбаный парсер форума!!! $coded = array_map('rawurlencode', $arr); // Обработать массив функцией rawurlencode $restored = 'http://'.$url{'host'} // {} ЗАМЕНИТЬ на квадратные скобки, грёбаный парсер форума!!! .implode('/', $coded); // Собрать перекодированный url обратно # $restored = str_replace('%23', '#', $$restored); // Ибо rawurlencode заменяет якорь '#' на ''%23'
Спасибо, попробую это решение.
Ссылки могут быть любыми, с разными доменами, папками, именами файлов, у меня каталог программ, программы добавляют авторы, программ более 10 тыс., так что могут быть любые варианты...
Ссылки сохраняются в базу как их добавляют авторы, движок сайта 2003 года, тогда мне и не попадалось никаких ссылок с русскими буквами...
Согласен, все решаемо конечно, просто думал, что парой строк обойдусь, а не функцией + классом..