Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Jak przekonwertować tabelę do postaci normalnej
Forum PHP.pl > Forum > Przedszkole
qrzysztof
Witam,

Mam tabelę:

  1. CREATE TABLE `t_rozwiazania` (
  2. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `id_testu` smallint(5) UNSIGNED NOT NULL,
  4. `id_uzytkownika` smallint(5) UNSIGNED NOT NULL,
  5. `rozwiazany` mediumint(8) UNSIGNED NOT NULL DEFAULT '0',
  6. PRIMARY KEY (`id`)
  7. )


Kombinacja id_testu i id_uzytkownika jest w tej tabeli unikalna. Jeśli użytkownik rozwiąże test to zwiększa się licznik (czyli wartość w kolumnie rozwiazany) o 1.

Chcę wyeliminować kolumnę rozwiązany. Czyli jeśli jakiś użytkownik rozwiązał jakiś test 15 razy, to dotychczasowy 1 rekord ma się zmienić w 15 nowych. Chcę wyeliminować kolumnę rozwiązany ale zachować wszystkie dane.

Jak to zrobić? Tabela zawiera już sporo rekordów więc o ręcznej konwersji nie ma mowy. Logiczne wydaje się napisanie jakiegoś skryptu php. Ale może są jakieś sprytniejsze metody, np za pomocą samego sql?

skowron-line
Jeżeli chcesz usunąć kolumnę z zachowaniem wszystkich rekordów to ALTER TABLE drop column....
qrzysztof
Nie tyle z zachowaniem rekordów co danych (informacji). Samo usunięcie kolumny rozwiazany powoduje utratę informacji.
Ilware
chyba najłatwiej będzie zrobić to PHP, bo pisanie funkcji w SQL jest dosyć uciążliwe, przenieś sobie to wszystko do tablicy tymczasowej gdzie zrobisz wszystkie operacje jakie chcesz a potem skopiuj do normalnej, jak masz bardzo dużo wpisów w tabeli to uważaj żeby nie zwiesić MySql bo mogą się dane wtedy zepsuć przy takich operacjach.
Crozin
1. Klucz obejmujący kolumny id_testu i id_użytkownika nie będzie mógł być dłużej unikalny.
2. Utwórz sobie nową tabelę (by nie operować na oryginale) z docelową strukturą.
3. Napisz skrypt, który wrzuci do nowej tabeli dane na podstawie danych ze starej (tj. odczytujesz rekord i do nowej wrzucasz jego okrojoną (o kolumnę rozwiązane) wersję w ilości równej wartości z kolumny rozwiązane).
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.