[ Ekonomist30 @ 25.10.2011. 22:54 ] @
Pozdrav svima.

Pitanje je:

Imam bazu A sa tabelom tA

zelim je exportovati (odredjena polja) - da li query mozda?

a zatim Importovati u bazu B, tabelu Tb. Radi se naravno o istom MySQL serveru.
MIslim da bi najbolje rjesenje bip PHP + Cron zadatak za tu php skriptu.

Ima li ko kavu ideju, jer sam ostao bez maste:

1. Kako da eliminiram "duple stavke" kod importa
2. Da ku bi neko da mi preporuci teoretski najbolji put da se ovo uradi u skripti, dakle-export/import/php/cron.

Hvala vam svima, sorry ako je malo zbrkano, ali onaj ko se razumije, skontace se :))
[ Zlatni_bg @ 25.10.2011. 23:14 ] @
Ovako bih ja to uradio:

Napravim pre svega cron job koji ce izvrsavati tu skriptu na neki odredjeni period (koji je tebi potreban). Svaki upis u tabeli A i u tabeli B ima svoj ID (polje ID), preko kojeg se vrsi provera da li upis vec postoji u tB. Radim SELECT query tabele A i prihvatam podatke. Potom iscitavam svaki red tabele koju sam prihvatio, citam njen ID i proveravam da li postoji u tB preko drugog query-ja, tako sto radim SELECT WHERE (id iz prve = id u drugoj, ili sta vec treba), i ukoliko nema rezultata, upisujem podatke iz reda tabele A u tabelu B. Tako za svaki red koji sam iscitao iz tabele A. Po potrebi brisem podatke iz tabele A.

Iz pitanja shvatam da je ovo nesto sto se jednom radi, ali posto si spomenuo cronjob, deluje mi da zelis vremenski da se izvrsava. Sve u svemu, ovo ti je neki nacin na koji to radis.

Verujem da postoji laksi nacin, koji bi pre svega manje opteretio MySQL server, ali ovako bih ja to odradio.
Koliko cesto ovo treba da se izvrsava i koliko je redova ukupno u obe baze, otprilike?
[ peromalosutra @ 26.10.2011. 00:03 ] @
Vrsenje SELECTa za svaki red je isuvise zahtjevno i treba ga izbjegavati pod svaku cijenu, pogotovo ako se planira neki veci broj rekorda.

Najbolje bi bilo da oba sistema koriste istu tabelu, na jednom serveru.

Ukoliko to nije izvodljivo, sledece rjesenje bi bilo modifikovati kod koji upisuje podatke u tabelu A, pa da generise SQL update fajl. Periodicno bi se ovaj fajl poslao na drugi server gdje bi se izvrsio i nova tabela bi bila updajtovana.

Ako i ovo nije moguce, onda je najefikasnije raditi clean import u tabelu B svaki put, naravno pod uslovom da se u B ne nalaze dodatni podaci koji ne postoje u A.
[ ivan.a @ 26.10.2011. 00:14 ] @
Generisanje sql fajla nije loše rešenje, ali možda zahteva dosta modifikacije originalnog koda.

Selektovanje svih rezultata pa provera jednog po jednog nije preporučljiva pogotovo ako imaš puno upisa (možda jedino auto-refresh sa limitiranjem kao što ima mysql dumper, ali ni to nije idealno rešenje ako se često poziva preko crona).

Možda je bolje da druga tabela tB ima polje tA_id. Radiš selektovanje poslednjeg ID-a iz tabele tB kako bi dobio poslednji unos. Zatim selektuješ sve iz tabele tA (WHERE ta.id>POSLEDNJI_tAID_tB_TABELE) i napraviš sql dump koji posle završene petlje insertuješ.
[ VladaSu @ 26.10.2011. 01:02 ] @
1.Mozes bez php-a preko cron joba dirketko iz konzole da pozivas dump
Code:

mysqldump --insert-ignore -u user -ppassword  mydatabaseA table1 > table1.sql | mysql -u user -ppassword mydatabaseB < table1.sql


2. Mozes da pozoves ovaj sql iz PHP-a ili opet iz konzole
Code (sql):

INSERT IGNORE bazaB.tabela (col1, col2)
SELECT col1, col2 FROM bazaA.tabela
 


3. Mozes da napravis php koji pravi dump fajl, jako lako i onda taj fajl da ucitas i izvrsis.

4. Mozes cak ako hoces da selektujes iz jedne baze sve sto nema u drugoj pa da to importujes.

5. Mozes da vidis koji je poslednji id u bazi B pa da sve posle toga selektujes u bazi A
[ Ekonomist30 @ 26.10.2011. 10:47 ] @
Super odgovori, hvala vam i naravno super komplikacija, kako sam i ocekivao - mislim na opterecenje servera.

Pokusacu ipak da sve stavim u jednu bazu, pa da tako prebacujem podatke iz tabele u tabelu- Hajd da vam objasnim o cemu se radi:

Radim na jednoj web stranici, ala Freelancer.com, znaci reverse bidding system, i to sam skoro zavrsio, znaci logovanje, liste poslova itd itd.

Rijesio sam i geo-polozaj bidova preko google maps-a, kada se objave nove ponude zadataka, one se mogu vidjeti na karti svijeta.

E sad, ideja mi je sljedeca-iskoristiti podatke koje imam u tabeli CLANOVI, te napraviti pretragu na GMaps, u smislu-imam formu pretraga. gdje upisem mjesto, npr.Sarajevo, i na mapi mi prikaze sve freelancere i poslodavce cija je adresa u Sarajevu. Belaj mi je to sto su mi polja tabele CLANOVI drugacijeg naziva, a sad da mijenjam cijeli kod stranice da bih uskladio sa ovom skruptom, fakat mi nema smisla, ili cu mozda na kraju ipak mijenjati kod skripte, ok, sta mogu.

Gogle-ov API za mape je dosta fleksibilan, ali sam ja zaribao, pa ako neko ima ideju da mi pomogne, a da ne mjenjam kod, bio bih zahvalan na ideji.

OTud mi ideja za cron - podaci iz tabele CLANOVI bi se u vremenskom periodu t prebacivali u tabelu PRETRAGA, znaci oni koji su potrebni (query), ali mi je to rjesenje "preglomazno", a mjenjanje kod-e vala ne mogu vise, ionako radim sedmicama :)).

Hvala vam u svakom slucaju i na svakom savjetu
[ valjan @ 26.10.2011. 12:01 ] @
Moj predlog je da iskoristis replikaciju - neka MySQL sam odradjuje posao, i ti ne moras da lupas glavu oko cronova, duplikata podataka itd. Procedura za setovanje replikacije nije mnogo komplikovana, jedina zvrcka kod tebe je sto ti obe baze trce na istom serveru, pa bi trebalo u stvari ubaciti dve instance MySQL servera na toj masini, svaka sa svojim zasebnim konfiguracionim fajlom, i jedna bi onda funckionisala kao master a druga kao slave...
[ Zlatni_bg @ 01.11.2011. 04:34 ] @
Zar replikacija ne bi kopirala ceo sadrzaj jedne baze u drugu? Sta ce da radi sa 2 iste baze na 2 razlicita servera?

Mislim da je replikacija nesto sto bi trebalo da se koristi za rasterecenje MySQL servera, bekap, i nista vise. Njemu je potrebno samo kopiranje odredjene tabele iz jedne baze u drugu bazu sa filtriranjem vec postojecih unosa.