SearchEngines.bg

Това е примерно съобщение за гост. Регистрирайте безплатен акаунт днес, за да станете потребител на SearchEngines.bg! След като влезете, ще можете да участвате в този сайт, като добавите свои собствени теми и публикации, както и да се свържете с други членове чрез вашата лична входяща кутия! Благодарим ви!

Странен проблем с MySql база данни

retro

New member
Здравейте,


Става дума промяна на голям брой еднакви данни в полето ad_city в таблицата adsmanager_ads на компонента AdsManager

Искам навсякъде където градовете се виждат в полето ad_city с числа, да ги променя със съответните градове.

За целта използвах Find and Replace в MySql по следния начин:

UPDATE jos_adsmanager_ads SET ad_city = replace(ad_city,'1','СОФИЯ');

В полето ad_city имаме точно 7230 записа със стойност "1"

След използване на горната команда, резултата е следния:

Засегнати редове: 10 345 което е странно. Би следвало да са точно 7230.

Когато видях в базата какво се е получило, се оказа, че освен правилната замяна на "1" със "СОФИЯ", която искаме, някои редове в полето ad_city са заменени със следните стойности:

СОФИЯСОФИЯ
6СОФИЯ5
СОФИЯ6
45СОФИЯ

в което няма никаква логика на пръв поглед, и което очевидно води до завишената калкулация на засегнатите редове (10345), спрямо реалния брой редове/записи (7230) които са намерени със Search функцията във phpMyAdmin, и които желаем да променим заедно.

Пробвахме и следната вариация :
UPDATE `jos_adsmanager_ads` SET `ad_city` = replace(`ad_city`,'\1','\СОФИЯ');
както и други варианти на командата, но резултата беше един и същ.

Някой знае ли на какво може да се дължи този странен проблем?
 
Последно редактирано:
Re: Странен проблем с MySql база данни

po_taka, не разбрах какво искаш да кажеш,

това което си написал го разбирам така:

ред 541 го сегментира на два реда:
54 и 1

но нещо не схващам замисъла какъв е, на всеки ред първоначалните стойности са едни и същи а именно 1? Би следвало всички да се заменят със СОФИЯ
 
Re: Странен проблем с MySql база данни

1 се заменя със София
но при 141 се заменя 2 пъти т.е. София4София

най-просто ми с вижда да ограничиш заявката с 1 WHERE

REPLACE(str,from_str,to_str)

Returns the string str with all occurrences of the string from_str replaced by the string to_str. REPLACE() performs a case-sensitive match when searching for from_str.

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
-> 'WwWwWw.mysql.com'

This function is multi-byte safe.
 
Re: Странен проблем с MySql база данни

За да оправиш кашата, пусни първо

Код:
UPDATE `jos_adsmanager_ads` SET `ad_city` = replace(`ad_city`,'СОФИЯ','1');

Така ще се върнат пак числата и после ползвай командата която ти дадоха по-горе с where.
 
Re: Странен проблем с MySql база данни

Аз по-скоро бих оставил градовете със съответните ID-та в отделна таблица.

В момента се опитваш да смениш ID-тата с Имената на градовете, за което на пръв поглед може да има следните причини:
1. В момента да са ти в друга таблица. В този случай защо ти е да ги местиш?
2. В момента да ги нямаш в базата. Пак е по-добре да са в отделна таблица.

Ако не са тези случаи или ако е друго, сори :) Ако ги имаш в друга таблица, може с 1 заявка да ги смениш наведнъж... Кажи точно какъв е случаят
 

Горе