Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Hurtowa zmiana wartości kolumny liczbowej o zadaną wartość
Forum PHP.pl > Forum > Bazy danych > MySQL
tombog
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.
mmmmmmm
Bez jaj.
UPDATE phpbb_posts SET post_id=post_id+100000000
tombog
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.
mmmmmmm
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ę.
tombog
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ę?
Pyton_000
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)
tombog
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?
nospor
o WHERE nie slyszal?

UPDATE phpbb_posts SET poster_id=115 where poster_id=24
tombog
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
nospor
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
tombog
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.
nospor
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
tombog
OK, teraz rozumiem. Faktycznie tak jest prościej smile.gif Dzięki za wyjaśnienia smile.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.