Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kopiranje sadrzaja tabela

[es] :: Baze podataka :: Kopiranje sadrzaja tabela

[ Pregleda: 2561 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Kopiranje sadrzaja tabela28.10.2005. u 16:02 - pre 224 meseci
Znaci imam sledeci problem:
Pravim web shop i imam 2 temp tabele (tako ih ja zovem) koje punim sadrzajem kosarice.
Namjerno sam ih nazvao temp da bih ih mogao puniti i brisati bez problema, tj bez straha da cu obrisati vec gotove narudzbe.
jedna je
temp_orders (id, session_id, prod_id, quantit, ...)
gdje su recordi proizvodi koje korisnik narucuje, druga je
temp_order_desc (id, order_id, value...)
koja zapravo predstavlja detalje o jednom proizvodu koje upisuje korisnik pri narucivanju.
(odnos master->detail).

Kad zavrsi sa punjenjem kosarice, korisnik ide na upis licnih podataka i tu se narudzba zakljucuje.
Ono sto ja pri 'zakljucenju' narudzbe zelim jeste podatke iz temp_orders prebaciti u
orders(id, personal_id, prod_id, ...) koja je zapravo kopija temp_orders s tim sto dodatno ima i personal_id, koji je veze na ime korisnika.
Sad, to kopiranje nije problematicno medjutim nastaje problematicno kopiranje temp_order_desc u order_desc jer u ovom slucaju order_desc->order_id treba da odgovara order->id a ne kao sto je vec temp_order->id.

Sad, jedno od rijesenja je formirati neku $#%$#temp tabelu, potrpati sve podatke tamo, i onda podijeliti ih u vec postojece tabele, na kraju je obrisati.
Drugo rijesenje je sve smjestiti u nizove, napraviti red i onda spiciti nekih 5-10 insert-a, buduci da nemam puno proizvoda u webshopu, medjutim to je ono 'seljacko' rjesenje pa ne bih bash.

Ideje?

p.s. nadam se da nisam pretjerano konfuzan jer je i meni trenutno konfuzija u glavi.. Djeluje mi jednostavno ali ne mogu... :)

p.s.s. inace je baza mySQL, ali mislim da se ovo da rijesiti i u svakoj drugoj bazi.
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.vdial.verat.net.



+3 Profil

icon Re: Kopiranje sadrzaja tabela28.10.2005. u 23:03 - pre 224 meseci
Google je zakon ako znas sta trazis.
Code:

INSERT INTO orders (ime_kolone1, ..., ime_kolonen) SELECT kolona1, ..., kolonaN FROM temp_orders;

Koliko sam shvatio tebe samo buni sto ove dve tabele imaju dva imena za kolonu koja cuma semanticki iste podatke.
Owl
 
Odgovor na temu

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Re: Kopiranje sadrzaja tabela28.10.2005. u 23:55 - pre 224 meseci
To je jedan par opanaka.
Drugi je u details tabeli.

To sto si napisao, sam vec uradio, znaci kopirao stavke iz temp_orders u orders.
Ali sad treba iskopirati iz temp_ordes_desc u orders_desc, s tim da se kreiraju relacije u novim tabelama
tj ako je u temp_orders -> temp_orders_desc postojala relacija 1:3
tako u orders->orders_desc treba postojati ista relacija tj iste stvake.

:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
217.16.84.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Kopiranje sadrzaja tabela29.10.2005. u 20:03 - pre 224 meseci
Kad kazes da je problem sa ID master tabele, onda mi to nekako indicira da ID ti je autoinc kolona ?

Ako je to autoinc ... onda bi nekako ovako izgledalo to
Code:

INSERT INTO orders (ime_kolone1, ..., ime_kolonen) SELECT kolona1, ..., kolonaN FROM temp_orders WHERE temp_orderID = X;

INSERT INTO order_details(orderID, .....) SELECT LAST_INSERT_ID(), kolona1, ... kolonaN FROM temp_order_details WHERE temp_orderID   = X;


People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Re: Kopiranje sadrzaja tabela29.10.2005. u 21:42 - pre 224 meseci
Hm, to bi fino radilo da je rijec o jednom recordu, ali rijec je o njih 'n'. Znaci moze biti 1 a moze biti 10. I ne moraju obavezno svi imati details, a mogu :)

:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
80.77.145.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Kopiranje sadrzaja tabela31.10.2005. u 08:40 - pre 224 meseci
Ako verzija MySQL-a nije 5.x koja podrzava stored procs ne preostaje ti nista drugo nego da ides record po record. Ali ipak ja bi ti savetovao da promenis strukturu baze.

znaci neka temp tabela ima autoinc za PK, a da prava tabela jednostavno ID kolonu preuzme iz temp tabele, tako da ce ti ref intergritet ostati nedirnut. Ovo moze upaliti jedino ako se prava tabela puni iskljucivo iz temp tabele.

I proveri dali bi mogao da migriras tabele na InnoDB i da postavis foreign keys.

[Ovu poruku je menjao Riste Pejov dana 31.10.2005. u 09:41 GMT+1]
People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.infonova.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Kopiranje sadrzaja tabela31.10.2005. u 09:01 - pre 224 meseci
Ne vjerujem da se moze to uraditi samo sa SQL-om...

E, sad, mozes koristiti ili jednu "session-based" temp tabelu, ili da uradis logicki dio u nekom od programskih jezika (hint: koristi nizove), pa konacan rezultat zapises u order i order_desc tabele...

Trenutno mi nista drugo ne pada na pamet...
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
80.77.145.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Kopiranje sadrzaja tabela31.10.2005. u 12:11 - pre 224 meseci
Ako sam ja dobro razumeo pitanje, valjda bi moglo da se to resi ovako:
(ako nisam, izvinite zbog dugackog posta )
Code:

CREATE TABLE temp_master(
ID autoincrement,
data char[10],
PRIMARY KEY (ID)
)
CREATE TABLE temp_detail(
ID autoincrement,
ParentID big int,
data char[10],
PRIMARY KEY (ID)
)

CREATE TABLE master(
ID big int,
data char[10],
PRIMARY KEY (ID)

)
CREATE TABLE detail(
ID big int,
ParentID big int,
data char[10],
PRIMARY KEY (ID)
)

insert into temp_master (data) values('bla1');
insert into temp_detail (ParentID,data) values(LAST_INSERT_ID(), 'bla11');
insert into temp_detail (ParentID,data) values(LAST_INSERT_ID(), 'bla12');
insert into temp_detail (ParentID,data) values(LAST_INSERT_ID(), 'bla13');

insert into temp_master (data) values('bla2');
insert into temp_detail (ParentID,data) values(LAST_INSERT_ID(), 'bla21');
insert into temp_detail (ParentID,data) values(LAST_INSERT_ID(), 'bla22');
insert into temp_detail (ParentID,data) values(LAST_INSERT_ID(), 'bla23');

INSERT INTO master (ID, data) SELECT ID,data FROM temp_master;
INSERT INTO master (ID, ParentID, data) SELECT ID, ParentID, data FROM temp_detail;


na kraju ref integritet je tacno prebacen iz temp u pravih tabela

People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Re: Kopiranje sadrzaja tabela31.10.2005. u 13:48 - pre 224 meseci
Ovako ..
Postoji mogucnost da uradim da ID iz temp_orders tabele ide u ID orders ali me tu buni jedno moje NEznanje. Sta se desava sa autoincrement kad se tabela popuni sa svih nekih 100mil vrijednost tj kad dodje do kraja brojac? Ide od pocetka ili popunjava rupe?
Mislim, to je mala mogucnost znaci da neko napravi int(11) znaci 99.999.999.999 recorda.
Rijesio sam taj problem na sledeci nacin.

1.
$query = "INSERT INTO ss_orders (person_id, product_id, sub_prod_id, price, quantity, weight, old_id) ";
$query .= "SELECT ".$personal_data->id.", product_id, sub_prod_id, price, quantity, weight, id FROM ss_temp_orders ";
$query .= "WHERE session_id = '$session_id'";

2.
$query = "INSERT INTO ss_order_desc (order_id, desc_name, value) SELECT t.id, d.desc_name, d.value ";
$query .= "FROM ss_temp_order_desc as d, ss_orders as t WHERE d.order_id = t.old_id AND t.person_id = ".$personal_data->id;

Znaci, napravio sam old_id kolonu gdje se smjesta stari ID. Onda potrazim po temp_details tabeli recorde koji imaju old_id i vezem ih za nove.



[Ovu poruku je menjao misk0 dana 31.10.2005. u 14:55 GMT+1]
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
80.77.145.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Kopiranje sadrzaja tabela31.10.2005. u 14:37 - pre 224 meseci
pa ako ti je ID numerci(18,0) t.j. BIG INT ... znaci da ces imati toliko puno posla da ce ti biznis procesi traziti da redizajniras softver mnogo pre nego sto stignes do rednog broja sa 18 nuli :) I u svako vreme mozes da imas kompozitni ID, dve BIG INT kolone da budu PK i onda imas 36 nuli za rednog broja ... i tako nadalje :)
People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

[es] :: Baze podataka :: Kopiranje sadrzaja tabela

[ Pregleda: 2561 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.