Замяна на подниз в низ в MySQL - Дневник на уеб програмиста

Бележки, мисли и полезни връзки на програмиста

Замяна на подниз в низ в MySQL

По някакъв начин имах нужда да променя някои стойности в базата данни. По-точно беше необходимо да се замени част от реда в полетата на една таблица при прехвърляне на сайта, днес споделям това решение с вас.

table_name - име на таблица field_name - име на поле, в което заместваме подниза

Така пътят до файла/var/www/upload/file_name.ext ще се превърне в/var/home/site/htdocs/upload/file_name.ext и вашият сайт ще работи добре на новия хостинг.

Успех, добър код и красиви решения за вас.

Granmercy, просто възникна проблем със замяната на част от пътеките, мислех, че ще трябва да раздвижа рекурсия върху децата и тогава си помислих - вероятно можете по някакъв начин да замените подниза директно в mysql навсякъде. Спестих много време. Късмет!

Радвам се, че мога да помогна!

Не, не всичко е правилно. Получавам не резултата, а - Данните са твърде дълги за колона „модел“ на ред 1. И дори phpmyadmin не може да се справи

Очевидно текстът в полето е твърде дълъг. Покажете заявката, причиняваща грешката, типа на полето и данните.

И как във всички таблици и във всички полета да се замени? Можете да напишете такава sql заявка или да използвате външни инструменти, например да напишете php скрипт

Това няма да работи, ако таблицата има подниз от формата „stroka“ и друг подниз от формата „stroka2“.

UPDATE table SET field = REPLACE(field, 'stroka', '2222') WHERE поле LIKE %stroka%;

ще замени всички поднизове, съдържащи 'stroka' с '2222'

И низът „stroka2′ ще приеме формата „22222“.

И така, какво ще стане, ако трябва да оставите стойността на 'stroka' същата, да приложите REPLACE само към редове, които имат 'stroka2'?

Добавяне на WHERE в края на вашетозаявки като WHERE поле LIKE %stroka% (както и варианти на LIKE като stroka% или %stroka) няма да върнат нищо.

Какво да правим тогава?

Не разбирам какво трябва да направиш. Ако искате да замените „stroka“ с „2222“ само там, където стойността е „stroka2“, тогава трябва да филтрирате по WHERE поле = „stroka2“ или ако филтрирате по подниз, WHERE поле LIKE „%stroka2%“;