![]() |
![]() |
![]()
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: 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: 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 ![]() Uprzejmie proszę o pomoc i pozdrawiam |
|
|
![]() |
![]()
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 |
|
|
![]()
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ć ? ![]() Ten post edytował malin90 30.03.2012, 01:32:14 |
|
|
![]()
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 |
|
|
![]()
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:
-------------------- http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
|
|
|
![]()
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
![]() 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 ![]() Sprawdzając działanie przykładowego kodu: 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ć ![]() naprawdę nikt nie wie ![]() Ten post edytował malin90 30.03.2012, 21:25:04 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 19:55 |