Поиск ссылок на сайте, начинающихся с цифры, в базе данных сайта с помощью оператора REGEXP MySQL
Поиск ссылок на сайте, начинающихся с цифры, в базе данных сайта с помощью оператора REGEXP MySQL

Когда-то давным-давно в те времена, когда Лунная База была мной поднята уже не помню в который раз и я начал формировать её структуру, всё бы сразу могло сложиться правильно, но, увы и ах, всего не учтёшь. И вот, по прошествии некоторого времени, я понял, что структуру нужно развивать и создал для каждой категории Joomla свой пункт меню. И... тут таааакое началось! Для тех категорий, у которых до этого не было своего пункта меню поменялись URL, а значит, все ссылки на сайте, которыми я перелинковывал отдельные статьи стали иметь своих дублёров (из тех, что формируются динамически движком Joomla). Большую часть я поправил ручками и массовой заменой в базе данных через phpMyAdmin. Но не все. Что-то ещё осталось. И пришло время финального наведения порядка с заменой оставшихся старых URL на новые. О том, как это автоматизировать, собственно эта статья посвящается. =)

Старт! Честный VDS/VPS, на котором «Лунная База» живет уже 20+ лет

Задумываетесь о том, чтобы поднять свой pet-проект, сайт клиента или настроить окружение для разработки? Уже пора подумать, где арендовать железо.

Лунная База хостится на FirstVDS более 20 лет. Мыслей о том, чтобы перебраться на другой хостинг, не было ни разу (хотя опыт работы с другими вариантами, конечно, есть).

Бывали разные ситуации, но они бывают на любом железе. Главное, что нужно понять: здесь нет маркетинговой шелухи и сказок про «мы всё сделаем за вас». Если вы берете VDS — вам дают полный root, возможность накатить любую ОС и не лезут в ваши конфиги.

Если в саппорт написать с вопросом по вашему коду и получить ответ: «Читайте документацию и разбирайтесь сами» или «Обратитесь к профильному специалисту» — это не повод обижаться. Это повод углубить свои знания в DevOps и сайтостроении! Бегите от тех, кто пообещает: «Мы всё чиним и настраиваем абсолютно бесплатно!». Никто никогда не работает «по доброте душевной» в ущерб себе, а бесплатный сыр в администрировании обычно заканчивается сломанной базой данных.

Что по факту: Гибкое масштабирование ядер и RAM, экономия по сравнению с физическими серверами и адекватная панель ispmanager, если она вам нужна.



Старые ссылки, которые нужно найти

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

<a title="Регистрация в Instagram с компьютера" href="/social-network/instagram/522-instagram-pc-registration.html"><strong>после регистрации</strong></a>

И что ещё важно, в базе данных сайта они хранятся в форме

href="social-network/instagram/522-instagram-pc-registration.html

То есть без обратного слэша в начале. То есть, начинаются с цифры (ID категории). Зная это, устроим поиск в базе данных по этому значению.

Условие LIKE в MySQL

Воспользовавшись условием LIKE по конкретному полю introtext в таблице постов joomla_content, если задать известную цифру:

SELECT * FROM `joomla_content` WHERE `introtext` LIKE '%href="57%'

получим выборку всех записей, где в тексте есть совпадение href="57.  Для того, чтобы искать совпадение по всему тексту (и в начале, и в конце, и в середине), используем символ %, который в MySQL означает «какие угодно символы».

Это если известно ID категории и его можно точно указать. Однако, стоит расширить поиск, введя вместо конкретного значения диапазон [0-9] (эта запись означает - все символы от 0 до 9, то есть все цифры):

SELECT * FROM `joomla_content` WHERE `introtext` LIKE '%href="[0-9]'

в итоге ничего не получим: — ни одного совпадения не найдено. Странно, печально, но тут самое время вспомнить про регулярные выражения (регэкспы)...

Условие REGEXP в MySQL

Применим REGEXP для решения этой (на первый взгляд) тривиальной задачи:

SELECT * FROM `joomla_content` WHERE `introtext` REGEXP 'href="[0-9]'

И Ура(!) всё находится! Значит, для таких типов задач нужно применять условия с регулярным выражением REGEXP, а не с LIKE. Потратив на решение этой задачи пару-тройку часов, пытаясь решить её с помощью LIKE, подсовывая ему (ей(?)) разные варианты того, как могут выглядеть цифры, но так ничего и не добившись, я решил посмотреть в сторону регэкспов и, практически сразу, решил стоящую задачу формирования выборки по условию из базы данных.

Делюсь для тех, кто нашёл эту статью + сохраняю найденное решение себе на долгую память (полученный опыт нужно аккумулировать). =D

Самый честный хостинг за 20+ лет существования Лунной Базы

Задумываешься о том, чтобы поднять свой сайт в Интернете? Уже пора подумать о том, какой хостинг выбрать?

Лунная База хостится 20+ лет на firstDVS. При этом, мыслей о том, чтобы перебраться на другой хостинг не было. (Но, при этом есть опыт работы с другими вариантами.)

Бывали с firstDVS разные ситуации, но, они бывают на всех хостингах. Единственное, что тут важно понять, - это то, что никто ничего тебе не будет впаривать... Но, и работать за тебя тоже никто не станет. Если в саппорт ответили: «Читайте по ссылке и разбирайтесь сами...» или вообще «Обратитесь за помощью к специалисту», - это повод углубить свои знания в области сайтостроения, а не бежать к тем, что пообещают: «Мы всё чиним и всё делаем за своих клиентов абсолютно бесплатно!» Никто никогда ничего ни за кого "по доброте душевной" не делал, не делает и не будет делать!

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню