
Jak dodać prefix do wszystkich tabel w bazie
maj 1, 2007Mam konto mini na webd.pl. 200MB na stronę, transfer miesięczny 4GB i tylko 1 baza MySQL :/ O ile miejsca i transferu w zupełności mi wystarcza, tak ta jedna baza już nie. Jestem osobą dość kreatywną i miewam czasami kilka/kilkanaście pomysłów na sekundę, a jedna baza trochę mnie ogranicza. Zajmuje ją wortal useLinux, a ja chciał bym jeszcze bloga, jakąś bazę do testów itp. itd.
Myślałem o upgrade’dzie do konta large, ale daje mi ono dwa razy więcej przestrzeni i transferu których i tak nie wykorzystam, a tylko 2 dodatkowe bazy. To mnie i tak nie satysfakcjonuje, a koszty utrzymania wzrastają prawie dwukrotnie. Konto niestandardowe też nie wchodzi w grę ponieważ musi ono przewyższać parametrami konto WEBD Extra – 3GB na stronę, 480GB transferu i nielimitowana ilość baz MySQL. Cena – bagatela 299,9 zł/rok.
Musiałem wymyślić coś innego
Grzebiąc w plikach konfiguracyjnych WordPressa i Drupala zauważyłem, że mają one możliwość koegzystencji z innymi systestemami i korzystania z jednej bazy przy pomocy tzw. prefiksów (kilku znaków dodawanych na początku nazwy każdej tabeli). To jest to! Rozwiązanie mojego problemu
Drupal i WordPress w jednej bazie!
OK, ale Drupal jest już zainstalowany i żadnych prefiksów w nazwach tabel nie ma. Rzut okiem na opcje phpMyAdmin i… zonk. 53 tabele i nie ma opcji masowej zmiany nazw :/ O nie, ja ręcznie robił tego nie będę… zwłaszcza, że operacji na żywym ograniźmie nie lubię więc ilość operacji się podwaja, a w przyszłości jeszcze pewnie nie raz, nie dwa stanę przed takim zadaniem.
Pora poszukać odpowiedzi w Google: how do i add prefix to my gamma tables?
AFAIK the only way to do this is changing them manually one-by-one.
no to mnie Steve Machol pocieszył
Each table would need to be renamed by a seperate query unless you were really good at sql queries.
nie znam SQL, trochę PHP…
tgmorris użył SHOW TABLES, aby pokazać wszystkie nazwy tabel, wrzucił do Excela i dodał jakieś polecenia SQL, żeby zrobiło z tej nazwy tą z prefiksem. Tylko ja pod Linuksem nie mam Excela, a to nie jest zbyt dobry, ładny, ani uniwersalny sposób ![]()
Ale juz wiem jak pokazać liste tabel i znam polececenie do zmiany nazwy tabeli ;] teraz tylko jak je wykonać z poziomu skryptu PHP?
Chyba najwyższa pora na małą lekcję SQL:
Kurs języka SQL
Obsługa MySQL’a w PHP
Proste. Pomysł jest taki: biorę liste tabel dla każdej robię RENAME TABLE nazw TO prefix+nazw i gotowe. Pobieram dane, robię pętelkę i gotowe…
…nie do końca… Resource #id3 :/ Po kilku próbach i googlowaniu stwierdzam, że trzeba zmienić sposób pobierania nazw tabel.
Google: PHP MYSQL Example
przejrzałem kod i już wiedziałem co będzie mi potrzebne ![]()
mysql_list_tables()
mysql_tablename()
mysql_num_rows()
teraz wystarczy tylko zrobić pętelkę, wykorzystac odpowiednio te funkcjie i dodać parametry, dla łatwiejszego dalszgo użytkowania
add_prefix.php (922B; po sciągnięciu zmień nazwę pliku na add_prefix.php)
Skrypt działa i nic więcej nie można o nim powiedzieć
To mój pierwszy skrypt z wykorzystaniem SQL więc wybaczcie jeśli głoszę tutaj jakieś herezje
Wszystkie poprawki, sugestie, komentarze mile widziane. Jeśli ten skrypt Ci się przydał, daj mi o tym znać!
Update:
Według sugestii hubiego zmodyfikowałem nieco skrypt, aby był nieco bardziej wymowny
Teraz po jego uruchomieniu pojawią się nazwa bazy danych na której pracujemy, zmieniane nazwy table oraz komunikat o zakończeniu działania skryptu. Jeśli lubicie swoje dane radzę PRZED WYKONANIEM SKRYPTU WYKONAĆ KOPIĘ ZAPASOWĄ DANYCH.
add_prefix_v0.01.php (po sciągnięciu zmień nazwę pliku na .php)
spox moze niedlugo pomieszam nim w paru bazach :]
tylko uważaj bo ten skrypt jest bezwzględny
Proponuję dopisać WIELKIMI litrami, żeby przed wykonaniem skryptu zrobić backup bazy oraz w pętli zrobić echo, że dana tabela została zmieniona, bo ktoś będzie w kółko robił widząc blank page
dzięki hubi za zainteresowanie, wprowadziłem zasugerowane przez Ciebie zmiany, zrobiłem update w poście i podałem link do nowej wersji.