Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kopiowanie danych z jednej tabeli do drugiej
Forum PHP.pl > Forum > Bazy danych > MySQL
mihmih
Witam,

Zdecydowałem się na zmiany struktury w mojej bazie i teraz będzie boleć, pewnie kilkadziesiąt kwerend do zmiany. Ale zmiana jest konieczna i potrzebuje trochę pomocy. Mam tabele z produktami które firma sprzedaje i w niej cenę produktu. Jako że te ceny coraz częściej się zmieniają a nie mogę w nieskończoność regulować tego rabatem w innej tabeli zamówień chce w tabeli produkty dodać pole id ceny i stworzyć nową tabele z cenami. Będzie tam również pole obowiązuje od i pole obowiązuje do które będę porownywal z datą wpływu zamówienia. Dzięki temu w podsumowaniach wszystko będzie się zgadzać i nie trzeba będzie wspomagać się rabatem przy częstych zmianach cen.

Przepraszam za długi wstęp, już tłumaczę czego nie potrafię zrobić. Chciałbym z tabeli produkty pobrać id produktu, cenę i wykorzystać je przy utworzeniu nowej tabeli gdzie oprócz tych dwóch kolumn stworzy się auto integer id ceny jako klucz główny i pole 'obowiązuje od' do wszystkich skopiowanych wartości ustawione od razu na 01.01.2015.

Czy taka operacja jest możliwa?
mmmmmmm
Jest, ale nie zalecana.
Możesz skorzystać z CREATE TABLE AS .. potem dodać id. Ale to utworzy ci tabele z domyślnym ENGINE, kodowaniem itp. Słowem - wiele do zmieniania, a jak zapomnisz, to skutki mogą być ... złe.
mihmih
udało mi się to zrobić półautomatycznie, skopiowałem dane z widoku (gdzie miałem wybrane kolumny) do nowoutworzonej tabeli, a pole "obowiązuje od" jednak nie będę uzupełniał przy pojedynczych cenach.

Więc w przypadku jednej ceny obydwa pola z datą będę miał puste, w innych przypadkach pierwsza cena będzie miała tylko "obowiązuje do", środkowe będa miały obydwie wartości, a ostatnia tylko "obowiazuje od". Mam taką kwerendę, która na podstawie tych założeń pokazuje mi aktualną cenę. O dziwo działa, ale nie jestem dobry w podzapytaniach, czy te dwa wyrażenie SELECT nie muszą być jakoś połączone ze sobą? Wystarczy że są grupowane po tej samej wartości?


  1. SELECT CASE WHEN COUNT( `ceny`.`ID_c` ) = 1 THEN `ceny`.`cena_w` ELSE
  2.  
  3. ( SELECT `ceny`.`cena_w` FROM `baza`.`ceny` WHERE
  4.  
  5. ( NOW( ) < `ceny`.`obow_do` AND NOW( ) > `ceny`.`obow_od` ) OR
  6. ( NOW( ) < `ceny`.`obow_do` AND `ceny`.`obow_od` IS NULL ) OR
  7. ( `ceny`.`obow_do` IS NULL AND NOW( ) > `ceny`.`obow_od` )
  8. GROUP BY `ceny`.`ID_w` ) END AS `aktualna_cena`,
  9.  
  10. `waluty`.`skrot`, `wyroby4`.`ID_wyrobu`, COUNT( `ceny`.`ID_c` ) FROM `baza`.`wyroby4` AS `wyroby4`, `baza`.`ceny` AS `ceny`, `baza`.`waluty` AS `waluty` WHERE `wyroby4`.`ID_wyrobu` = `ceny`.`ID_w` AND `wyroby4`.`ID_waluty` = `waluty`.`ID_waluty` GROUP BY `wyroby4`.`ID_wyrobu`
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.