[PHP] kopiranje podatkov iz ene tabele v novo
5 naročnikov
5 naročnikov
Zdravo!
Postavljen sem pred en izziv. In sicer... Urejam en že obstoječ sistem za prodajo. Trenutno je situacija takšna, da imam eno tabelo narocila v katero se podatki stranke (ime, priimek, naslov) vpisujejo direktno v to tabelo. Moja naloga je, da sedaj kreiram novo tabelo kupci, ter vse te stranke prenesem v novo tabelo, v tabeli narocila, pa vsakemu naročilu pripišem ID stranke, ki jo pač stranka dobi v novi tabeli. Težava je v tem, da je v tabeli narocila več kot 300000 vrstic, ter več naročil z enako stranko.
Recimo Janez Novak je pri nas kupil 10 stvari, vendar mora biti v novi tabeli vnešen samo enkrat, tistim 10 naročilom pa je potrebno pripisat njegov ID ki ga je prejel ob vnosu v novo tabelo kupci.
Ima kdo kakšen nasvet kako se lotit tega? Oz. kaj naj iščem na googlu da si pomagam?
Hvala!
8 odgovorov
Verjetno bo za začetek nekaj v smislu
SELECT DISTINCT column INTO tableB FROM tableA
Potem pa id iz nove tabele pripišeš stari, ki si je dodal nov stolpec z imenom idStranke
Dal si premalo informacij. Ali imaš v stari tabeli stranke duplikate? Kakšne so sheme trenutnih tabel, kakšna mora biti shema nove tabele? Predvsem kakšna je shema tabele naročila, ali imaš tam kakšen unikaten podatek, da ga lahko ujameš s podatki v tabeli stranke? Ime in priimek običajno ni dovolj. Če imaš pa ID, potem pa sploh ni problema? Če prej nisi imel duplikatov, potem zdaj ne boš imel problema, lahko samo staro tabelo urediš - dodaš nove stolpce. Če pa je potrebno sestavit relacije med tabelami preko npr. tujih ključev, ki jih do zdaj ni bilo, in nimaš kakšnega smiselnega podatka za povezavo (ponovno: ime in priimek ni dovolj), bo pa potrebnega kar nekaj ročnega dela. Najprej sestavit unikat na najboljši način kot lahko (ime, priimek), ročno preverit ali je možno da je kje to drugačna oseba, v stari tabeli dodati nek (naključni) ID, in na to dodat tuj ključ.
Ja morda sem res premalo natančno povedal. V stari tabeli imam kar se tiče podatkov o stranki samo IME, PRIIMEK, ULICA in POSTA. Torej stranka nima svojega unikatnega kljuca. In točno to me moti, zato bi rad naredil za stranke posebej tabelo in v njo vsako stranko prenesel samo enkrat, saj ne želim imeti podvojenih strank, kot je to sedaj v stari tabeli.
Stranke bom matchal po imenu, priimku, ulici in posti. Drugega bolj natančnega načina žal ne vidim.
Tabeli sedaj izgledata takole:
narocila
- IDNAROCILA
- IME
- PRIIMEK
- ULICA
- POSTA
- IDKUPEC (na novo dodana kolona za povezavo z novo tabelo)
- drugi podatki o narocočilu ki nimajo veze s stranko
nova tabela KUPEC
- ID_KUPEC
- IME
- PRIIMEK
- ULICA
- POSTA
Javornik:
Ja morda sem res premalo natančno povedal. V stari tabeli imam kar se tiče podatkov o stranki samo IME, PRIIMEK, ULICA in POSTA. Torej stranka nima svojega unikatnega kljuca. In točno to me moti, zato bi rad naredil za stranke posebej tabelo in v njo vsako stranko prenesel samo enkrat, saj ne želim imeti podvojenih strank, kot je to sedaj v stari tabeli.
Stranke bom matchal po imenu, priimku, ulici in posti. Drugega bolj natančnega načina žal ne vidim.Tabeli sedaj izgledata takole:
narocila
- IDNAROCILA
- IME
- PRIIMEK
- ULICA
- POSTA
- IDKUPEC (na novo dodana kolona za povezavo z novo tabelo)
- drugi podatki o narocočilu ki nimajo veze s strankonova tabela KUPEC
- ID_KUPEC
- IME
- PRIIMEK
- ULICA
- POSTA
Iz prakse ti povem, da matchanje strank, kot si navedel vrača zelo slabe rezultate :).
Ljudje pišejo ulice včasih s polnim imenom, včasih s c., včasih celo brez. Pri hišni številkah je še večja zbrka :).
Če nima accounta na tvoji strani z passwordom tale pristop nima lih smisla, lahko tudi da sta dva Janeza Novaka na istem naslovu.
To je vsekakor res, ampak jih lahko sortiram tudi po gsm, emailu itd. Accountov pa ni, ker to ni spletna trgovina, ampak neke vrste POS sistem (ki to ni).