Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] update i replace z tablicy
Forum PHP.pl > Forum > Przedszkole
malin90
Witam,
mam problem ze zmianą znaków w rekordzie, który składa się 8 cyfr, używam funkcji "replace" a znaki jakie mają być zmienione, dla większej czytelności
chciałem umieścić w tablicy, kod wygląda następująco:

  1. $z = array('1','2','3','4','5','6','7','8');
  2. $na = array('8','7','6','5','4','3','2','1');
  3. mysql_query("UPDATE `tabela` SET `data` = REPLACE(`data`,'$z','$na')");


Póki nie chcę pobierać danych z tablicy wszystko działa, tzn. prawie bo nie wiem jak zażądać zmiany więcej niż jednej cyfry np:
  1. mysql_query("UPDATE `tabela` SET `data` = REPLACE(`data`,'1','2')");

po tym zamienia wszystkie "jedynki" w ciągu liczbowym na "dwójki" a ja muszę pozamieniać jeszcze 7 pozostałych cyfr...

Pewnie zrobiłem gdzieś jakiś banalny błąd, kombinuję na wszystkie sposoby ale nic nie wychodzi, dopiero raczkuję w php smile.gif
Uprzejmie proszę o pomoc i pozdrawiam
tolomei
Może spróbuj pobrać całą komórkę z bazy do zmiennej, następnie za pomocą funkcji php zamienić znaki i następnie zapisać dane z powrotem do bazy.
Używając pętli możesz zmienić całą bazę za pomocą jednego skryptu.

Jeśli coś jest nie jasne w tym co napisałem - pytaj.
malin90
Czy takie pobieranie pojedynczo komórek jest konieczne, wydaje mi się to mocno obciążające dla serwera w momencie gdy takich komórek w kolumnie mam kilka tysięcy ?
serwer ma dwa razy więcej roboty, bo skrypt musi najpierw pobrać dane, potem je przetworzyć i wysłać, a tak tylko je zmienia...
może moje rozumowanie jest błędne, jeśli tak to proszę o wyprowadzenie mnie z błędu.
I teraz zadam może głupie pytanie, ale po co je pobierać skoro nie chcę ich nigdzie wyświetlać ? cool.gif
tolomei
No racja ten mój sposób nie byłby zbyt wydajny.
Nie możesz wstawić tablic w funkcji REPLACE.
Powinieneś wywołać zapytanie UPDATE z funkcją REPLACE oddzielnie dla każdej literki.
Na pewno są jakieś bardziej zaawansowane rozwiązania z użyciem bardziej zaawansowanego SQL-a, ale w takim wypadku musisz liczyć na innych użytkowników.
d3ut3r
Nie wiem jak z wydajnością ale możesz zagnieździć REPLACE np:

  1. UPDATE dane SET kolumna=REPLACE(REPLACE(REPLACE(kolumna,'1','8'),'2','7'),'3','6');


malin90
Sytuacja bez wyjścia stała się stała się teraz sytuacją z dwoma rozwiązaniami smile.gif
Teraz mam dylemat, które rozwiązanie będzie wydajniejsze...

Sposób który podał ~tolomei na wywołanie replace pojedynczo dla każdej zmiany,
czy zapis jaki przedstawił ~d3ut3r, zastrzegłeś jednak, że nie wiadomo jak z wydajnością...

Skłaniam się ku ostatniej opcji... mam słuszność ?

EDIT

Pojawił się następny problemik smile.gif

Sprawdzając działanie przykładowego kodu:
  1. mysql_query("UPDATE `tabela` SET `data` = REPLACE(REPLACE(`data`,'2','1'),'1','3')");


natknąłem się na problem którego nie przewidziałem...
chciałem to tak zorganizować aby kod przeszukując rekord i znajdując cyfrę "2" zamienił ją na "1" i dalej znajdując "1" zamienił ją na "3".
Niestety jak się pewnie domyślacie, zamiana "1" na "3" powoduje, że w efekcie wcześniejsza zamiana "2" na "1" przestaje istnieć i na miejscu "2" pojawia się "3".

Czy da się to zrobić tak aby kod przeszukiwał rekord tylko jeden raz ? jeśli tak to jak to zrobić questionmark.gif

naprawdę nikt nie wie questionmark.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.