Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 9 odgovora
  • 3.440 pregleda

Najnovija ↓

Kopiranje sadrzaja tabela 28.10.2005. u 17:02 · pre 256 meseci #1
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.
Potpis
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
Re: Kopiranje sadrzaja tabela 29.10.2005. u 00:03 · pre 256 meseci #2
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.
Potpis
Owl
Re: Kopiranje sadrzaja tabela 29.10.2005. u 00:55 · pre 256 meseci #3
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.
Potpis
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
Re: Kopiranje sadrzaja tabela 29.10.2005. u 21:03 · pre 256 meseci #4
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;

Potpis
People who think they know everything tend to irritate those of us who do.
Re: Kopiranje sadrzaja tabela 29.10.2005. u 22:42 · pre 256 meseci #5
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 :)
Potpis
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
Re: Kopiranje sadrzaja tabela 31.10.2005. u 09:40 · pre 256 meseci
izmenjeno 1 put, poslednji put Riste Pejov 31.10.2005. u 09:41
  1. Riste Pejov31.10.2005. u 09:41zapis iz teksta poruke
#6
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.
Potpis
People who think they know everything tend to irritate those of us who do.
Re: Kopiranje sadrzaja tabela 31.10.2005. u 10:01 · pre 256 meseci #7
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...
Potpis
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
Re: Kopiranje sadrzaja tabela 31.10.2005. u 13:11 · pre 256 meseci #8
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
Potpis
People who think they know everything tend to irritate those of us who do.
Re: Kopiranje sadrzaja tabela 31.10.2005. u 14:48 · pre 256 meseci
izmenjeno 1 put, poslednji put misk0 31.10.2005. u 14:55
  1. misk031.10.2005. u 14:55zapis iz teksta poruke
#9
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.
Potpis
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
Re: Kopiranje sadrzaja tabela 31.10.2005. u 15:37 · pre 256 meseci #10
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 :)
Potpis
People who think they know everything tend to irritate those of us who do.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme