Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] update i replace z tablicy
malin90
post 30.03.2012, 00:49:31
Post #1





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 5.01.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
tolomei
post 30.03.2012, 01:19:33
Post #2





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

Ostrzeżenie: (0%)
-----


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.


--------------------
“ Computers are good at following instructions, but not at reading your mind. ”
- Donald Knuth
Go to the top of the page
+Quote Post
malin90
post 30.03.2012, 01:25:09
Post #3





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 5.01.2009

Ostrzeżenie: (0%)
-----


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

Ten post edytował malin90 30.03.2012, 01:32:14
Go to the top of the page
+Quote Post
tolomei
post 30.03.2012, 01:53:33
Post #4





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

Ostrzeżenie: (0%)
-----


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.


--------------------
“ Computers are good at following instructions, but not at reading your mind. ”
- Donald Knuth
Go to the top of the page
+Quote Post
d3ut3r
post 30.03.2012, 03:03:59
Post #5





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

Ostrzeżenie: (0%)
-----


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');




--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
malin90
post 30.03.2012, 21:25:50
Post #6





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 5.01.2009

Ostrzeżenie: (0%)
-----


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

Ten post edytował malin90 30.03.2012, 21:25:04
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 19:55