Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Hurtowa zmiana wartości kolumny liczbowej o zadaną wartość
tombog
post 13.12.2016, 18:50:16
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 9.12.2010

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


Witam.
Mam pilną potrzebę hurtowego zwiększenia wartości liczbowej kolumny w tabeli o zadaną wartość. Chodzi o dodanie postów na forum, które zostały odzyskane po awarii po dość długim czasie. W między czasie zostały napisane nowe posty, które zajęły numery id postów teraz odzyskanych. Wymyśliłem, że do odzyskanej tabeli dodam aktualne rekordy i tylko będę musiał zmienić kilka tysięcy numerów id tych nowych postów.

Potrzebny do wklejenia zakres rekordów wyeksportowałem do osobnego pliku i tylko na nim będę chciał przeprowadzić operację zmiany ID. Najpierw zaimportuję go do bazy pod roboczą nazwą by przeprowadzić zmianę numeracji ID. Potem pobiorę tabelę z nowymi ID i następnie wkleję ten zakres do pliku odzyskanego i wtedy zaimportuję do bazy.

Czy ktoś mi może podać składnię zapytania zmieniające kolumnę o daną wartość? Będę to robił z poziomu phpMyAdmin. Nazwa tabeli to phpbb_posts a kolumny post_id.

Ten post edytował tombog 13.12.2016, 18:51:50
Go to the top of the page
+Quote Post
mmmmmmm
post 13.12.2016, 21:02:35
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Bez jaj.
UPDATE phpbb_posts SET post_id=post_id+100000000
Go to the top of the page
+Quote Post
tombog
post 13.12.2016, 23:48:04
Post #3





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 9.12.2010

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


Ależ jestem jak najbardziej poważny. Po użyciu Twojej propozycji otrzymuję komunikat:

#1062 - Duplicate entry '36931' for key 'PRIMARY'

Nie jestem guru mysql. Chcę tylko odzyskać posty z forum. Myśleć potrafię ale brakuje mi wiedzy w tej akurat materii dlatego proszę o pomoc.
Go to the top of the page
+Quote Post
mmmmmmm
post 14.12.2016, 08:13:42
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Sorry, bez jaj.
Gdybyś użył mojej propozycji, to nie mógłbyś uzyskać takiego komunikatu, gdyż takie entry by się nie pojawiło.
Pomyśl trochę.
Go to the top of the page
+Quote Post
tombog
post 14.12.2016, 09:56:34
Post #5





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 9.12.2010

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


Właśnie staram się myśleć. Zakładam, że +100000000 to przykładowa wartość i ja muszę w to miejsce wstawić własną o jaką chcę zwiększyć wartość w kolumnie post_id. Wypluwa mi wtedy takie entry jakie podałem.
Zakładam, że może chodzić o to, że taka wartość występuje w innym wierszu tej kolumny bo mieści się w zmienianym zakresie i wypluwa mi błąd o duplikacie. Nie wiem jak to obejść. Jedyne co mi przychodzi do głowy to faktycznie zwiększyć wszystko o milion i potem zmniejszyć o (milion minus żądana wartość).
Dobrze kombinuję?

Ten post edytował tombog 14.12.2016, 09:57:31
Go to the top of the page
+Quote Post
Pyton_000
post 14.12.2016, 10:40:58
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Znajdź MAX(post_id) w obecnej tabeli, dodaj do tej wartości np. 1000 i zwiększ post_id o tą wartość (będzie to np. 23400)
Go to the top of the page
+Quote Post
tombog
post 14.12.2016, 13:18:00
Post #7





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 9.12.2010

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


Więc tak. Dodałem 1000000. Uniknąłem w ten sposób dublowania wpisów i zadziałało pięknie. Następnie odjąłem tyle ile trzeba i mam już zmienioną numerację o tyle ile chciałem smile.gif Dziękuję bardzo za pomoc.

Mam jednak jeszcze prośbę o składnię do zamiany wartości w tabeli phpbb_posts w kolumnie poster_id ale według klucza zmień 24 na 115. Czyli tylko wiersze w kolumnie zawierające liczbę 24 zamieniamy na 115.

UPDATE phpbb_posts IF poster_id=24 SET poster_id=115 ? Dobrze to ogarniam?
Go to the top of the page
+Quote Post
nospor
post 14.12.2016, 13:20:20
Post #8





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




o WHERE nie slyszal?

UPDATE phpbb_posts SET poster_id=115 where poster_id=24


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
tombog
post 14.12.2016, 13:26:51
Post #9





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 9.12.2010

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


Cytat(nospor @ 14.12.2016, 13:20:20 ) *
o WHERE nie slyszal?

UPDATE phpbb_posts SET poster_id=115 where poster_id=24


Coś tam słyszał ale ja nie programista a jeno chcę forum uratować. Co się w tej zupie apdejtów, setów czy łerów dzieje to tak nie do końca wiem kiedy czego i w jakiej konfiguracji się używa.
Dziękuję bardzo za wyrozumiałość i pomoc smile.gif
Go to the top of the page
+Quote Post
nospor
post 14.12.2016, 13:33:26
Post #10





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




Wracajac do problemu z dodawaniem jakiejs liczby do ID to mmmmmmm nie wiem skad te obruszenie? Przeciez jak masz ID z zakresu 1..100 i dodajesz 50 to logiczne ze juz dla pierwszego ID bedzie 51 ktore jest duplikatem. By zrobic to poprawnie to trzeba dodac
...ORDER BY ID DESC
wowczas zacznie dodawanie od ostatniego ID i duplikaty sie nie pojawia smile.gif

Zabawa w dodawanie 10000000 a potem odejmowanie to z lekka przegiecie wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
tombog
post 14.12.2016, 14:43:47
Post #11





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 9.12.2010

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


Cytat(nospor @ 14.12.2016, 13:33:26 ) *
By zrobic to poprawnie to trzeba dodac
...ORDER BY ID DESC
wowczas zacznie dodawanie od ostatniego ID i duplikaty sie nie pojawia )


Czy mógłbyś bardziej łopatologicznie wyjaśnić zastosowanie tego w całej składni? Bo mi nie chodziło o zwiększenie od ostatniego ID tylko od konkretnego. Zmieniany zakres powiedzmy wynosił 37945 - 53976 a ja potrzebowałem zakres od 46427 - do ile tam wyjdzie. Nie ma więc opcji by nie było dubli moim zdaniem.
Go to the top of the page
+Quote Post
nospor
post 14.12.2016, 14:48:41
Post #12





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




Chciales zwiekszyc wszystkie ID o powiedzmy 20000.
Robiac tak

UPDATE phpbb_posts SET post_id=post_id+20000
bedzie ci plulo bledem taki jaki miales. To jest naturalne.
Ale gdy dodasz sortowanie, by najpierw lecial od ostatniego w dol, to bedzie wszystko cacy

UPDATE phpbb_posts SET post_id=post_id+20000 order by post_id desc
gdyz zacznie zmieniac rekordy od ostatniego a nie od pierwszego


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
tombog
post 14.12.2016, 15:01:28
Post #13





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 9.12.2010

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


OK, teraz rozumiem. Faktycznie tak jest prościej smile.gif Dzięki za wyjaśnienia smile.gif
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: 24.04.2024 - 17:43