Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Jak przekonwertować tabelę do postaci normalnej
qrzysztof
post
Post #1





Grupa: Zarejestrowani
Postów: 220
Pomógł: 19
Dołączył: 25.04.2009

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


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?

Go to the top of the page
+Quote Post
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Jeżeli chcesz usunąć kolumnę z zachowaniem wszystkich rekordów to ALTER TABLE drop column....
Go to the top of the page
+Quote Post
qrzysztof
post
Post #3





Grupa: Zarejestrowani
Postów: 220
Pomógł: 19
Dołączył: 25.04.2009

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


Nie tyle z zachowaniem rekordów co danych (informacji). Samo usunięcie kolumny rozwiazany powoduje utratę informacji.
Go to the top of the page
+Quote Post
Ilware
post
Post #4





Grupa: Zarejestrowani
Postów: 248
Pomógł: 31
Dołączył: 14.12.2010
Skąd: Wrocław

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


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.
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 21:35