Masowa zmiana rekordów w MySQL


(northwest) #1

Witam serdecznie,


(Fizyda) #2

Osobiście bałbym się zaangażować w to php, a tym bardziej phpmyadmina, chyba że istnieje możliwość zrobienia tego jednym zapytaniem, ale na tą chwilę nie jestem w stanie za bardzo nic wymyślić. Musiałbym zależeć w specyfikacje MySQL bo dawno go nie używałem i raczej coś by się znalazło, ogólnie wydaje mi się że powinno się dać radę to zrobić 1 zapytaniem oczywiście złożonym z podzapytania.

Ale jeśli nie chcesz siedzieć nad MySQL i zabawą w zapytania które wypadałoby przetestować na kopii tabeli, a dopiero potem na produkcyjne db to proponowałbym jakiś program konsolowy, np w c++ (może być coś innego ale zrezygnowałbym z języków skryptowych takich jak php). Taki program wyglądałby mniej więcej tak:

  1. Select do bazy i pobranie 1 rekordu, każdy kolejny można pobierać iteracyjnie lub przez odpowiedniego selecta w którym określisz jakiego wzoru szukasz czyli %s_%s w tedy nie będzie pobierał już zaktualizowanych rekordów.

  2. sprawdzenie czy należy dokonać zmiany jeśli tak to podmienić _ na -

  3. zaktualizować rekord

i robić to w pętli dopóki pierwszy select zwraca jakiś wynik lub w przypadku iteracyjnej metody do czasu aż przejdziesz po wszystkich rekordach.

Dodatkowo możesz do programu wprowadzić jakieś logi z ewentualnymi błędami funkcję star/stop czy informacje o postępie.

Jeśli chciałbyś użyć do tego php’a to tylko i wyłącznie odpalaj skrypt w konsoli. Jeśli będziesz chciał go wywołać jak skrypt serwera www może nie wykonać się cały ze względu na długi czas jego wykonywania.

 

EDIT:

Nawet jak znajdziesz sposób na zrobienie tego przez sql, nie rób tego w phpmyadminie tylko przez clienta mysqla, ponieważ obawiam się że skrypt phpmyadmina może się “zadławić”.


(Drobok) #3
UPDATE tabela SET kolumna = REPLACE(kolumna,'_','-')[/code]

No tak, w bazach danych tak to się zwie. Poprawiłem, chociaż komórka to jak kolumna biorąc inny kontekst zbioru, jednak pomylić tabelę z kolumną to już nie tak ładnie :stuck_out_tongue:


(hindus) #4

Chyba raczej UPDATE tabela SET kolumna = REPLACE(kolumna,’_’,’-’)

:wink:

 


(northwest) #5

dziękuje, pomogło :slight_smile:


(dr.boczek) #6

A taki referat Fizyda - specjalista od baz danych uskutecznił. Ile czasu wykonywało sie zapytanie? 7 sekund?