Здравствуйте! Помогите написать запрос для MySQL. Ситуация такая, переношу сайт с CMS-ки на laravel. CMS-ка позволяла прописывать внутренние пути в html-атрибутах src="..." и href="..." без слеша вначале. Теперь в этих атрибутах (если они ссылаются на внутренние источники) нужно проставить слеш вначале. С src я разобрался. Есть папка images в пути, которая позволила написать такой запрос: Код (Text): UPDATE `blog_items` SET `article` = REPLACE(article, 'src="images/', 'src="/images/') А как быть с атрибутом href="..." ??? Тут могут быть такие значения: href="http......" href="/...." href="..." Получается нужно чтобы значение атрибута не начиналось с http и со слеша / Помогите написать такой запрос.
Код (Text): UPDATE blog_items SET article = CASE WHEN LOWER(LEFT(article, 4))='http' THEN article WHEN LEFT(article, 1)='/' THEN article ELSE CONCAT('/', article) END CASE --- Добавлено --- Можно этот запрос таки немножечко улучшить, но учитывая, что выполнить его надо будет один раз в жизни - сойдет и так
Это точно сработает? Что мне нужно: если у меня в статье есть такая ссылка: Код (Text): <a href="forum">Форум PHP</a> То её нужно заменить так чтобы вначале был слеш: Код (Text): <a href="/forum">Форум PHP</a> При этом не трогать ссылки вида: Код (Text): <a href="https://php.ru/forum">Форум PHP</a> или если уже начинается со слеша.
Если Вам необходимо добавить слева прямой слеш в поле article таблицы blog_items для всех случаев, кроме если он там уже есть или начинается с http, то мой запрос сделает именно то, что Вы хотите. Ну с поправкой на возможные ошибки в синтаксисе, конечно.
В конце запроса фразу ""END CASE" заменить на просто "END" Код (Text): UPDATE blog_items SET article = CASE WHEN LOWER(LEFT(article, 4))='http' THEN article WHEN LEFT(article, 1)='/' THEN article ELSE CONCAT('/', article) END
Исправил. Запрос выполнил. Результат - ничего не изменилось. В атрибутах href="..." так и остались значения без слеша в начале.
Я неправильно прочитал ваше исходное сообщение. Пожалуйста, уточните, как выглядит атрибут href="..." без слеша в начале и на что его нужно изменить? Если таких вариантов без слеша в начале можем быть несколько, приведите, пожалуйста, все возможные варианты.
Даже не так. После запроса в каждую статью (столбец article) вставился слеш. Теперь все статьи на сайте начинаются со слеша. --- Добавлено --- В статьях есть ссылки. Многие из ссылок на внутренние страницы сайта. У них нет домена в атрибуте href, то есть ссылка идёт так: HTML: <a href="test/tset">Текст</a>
В исходном сообщении Вы попросили помочь Вам написать запрос или написать его за Вас полностью? Мне кажется, имея (непроверенный и неоттестированный) текст запроса, кот. я написал можно определить, как его написать правильно. Нет?
Для меня это сложный запрос, я не знаю как его написать. То что слеш вылез в статьях, то не беда - уберу, а вот как с атрибутом href разобраться, для меня проблема. С вашей постановки вопроса получается что "написать его за Вас полностью". Но при такой постановке задачи "сделай всё за меня" понятно что никто не захочет помогать. А мне с этим запросом нужна помощь, иначе вручную править статьи я засяду на очень долгое время.
Если Вы хотите, чтобы я написал запрос за Вас полностью, то уже ответьте на мои вопросы для того, чтобы я мог для Вас его написать?
Всевозможных вариантов очень много, названия категорий, папки сайта - в общем текст мальнькими латиницей сразу после href=". Я думал изначально что можно как то с регуляркой построить запрос основываясь на том что есть первых 6-символов href=" (в конце двойная кавычка) и после этого href=" недолжно быть http или слеша. А с регуляркой у меня беда.
Боюсь, без четкого определения того, что нужно сделать, никто, в т.ч. и Вы сами, не сможет написать этот запрос. Независимо от того, идет ли речь о регулярках или о других инструментах.
А какое должно быть чёткое определение? Есть столбец article в котором хранится html статей. В этих статьях есть ссылки. У ссылки есть атрибут href. Завязаться от самого тега <a не получиться так как могут быть атрибуты class и id. Но есть сам атрибут href. Перед ним есть один пробел, после него знак = и одна двойная кавычка " Если после кавычки идут латинские буквы, то перед ними нужно поставить слеш. Исключение если после кавычки идёт http Или мне нужно весь sitemap урлов выложить?