Topic: insert pries patikrindami

Susidūriau su problema, gal galite padėti ją išspręsti,
taigi idėja tokia: per formytę uploadinam studentų sąrašą (csv pavidalu), ir visą tą sąrašą insertinam į duomenų bazę.
Jei csv failas turi stuleplių pavadinimus, tai pirmą eilutę praskipinam.
Tačiau, prieš įterpdami turim patikrinti, ar tokio studento nėra duomenų bazėj. Kaip tą įgivendinti?
Bendrai paemus man reik patirkinti tris požymius:
jeigu login ir asm_id yra vienodi - neįterpiam išvis;
jeigu login ir asm_id yra skirtingi - update'inam tą įraša pagal asm_id;
jeigu login ir asm_id išvis tokia pora neegzistuoja (unikalus įrašas) - tokį įterpiam.

čia yra pirminis sprendimas, be jokių tirkinimų.

while (($data = fgetcsv($handle, 1000, "$skirtukas")) !== FALSE){
 if($pirma_eilute){$pirma_eilute=false;continue;} //skip'inam pirma eilute, jeigu yra headeris.
  $import="INSERT INTO testas (login,pwd,user_category_id,asm_id) VALUES ('$data[0]','$data[1]','$data[2]','$data[3]')";
  mysql_query($import);
 }
}

čia bandžiau kažką kniurpti, tačiau toks sprendimas man visiškai nepagelbėjo:

while (($data = fgetcsv($handle, 1000, "$skirtukas")) !== FALSE){
 if($pirma_eilute){$pirma_eilute=false;continue;} //skip'inam pirma eilute, jeigu yra headeris.
 $tikrinam = "SELECT asm_id, login FROM testas WHERE asm_id = '$data[3]' and login = '$data[0]'";
 $import="INSERT INTO testas (login,pwd,user_category_id,asm_id) VALUES ('$data[0]','$data[1]','$data[2]','$data[3]')";
 $tikrinam2 = mysql_num_rows($tikrinam);
 if($tikrinam2==0){
  mysql_query($import);
 }
}

Kaip aš suprantu, čia maniškis kodas patikrina įrašą, jį radęs, nevygdo užklausos, tačiau jeigu jis neranda, įvygdo import užklausą, kur įterpia visą failo turinį, nebepatikrinęs likusių.

Niekaip nesugalvoju, kaip kad tikrintų kiekvieną įrašą esantį tam csv faile su duomenų bazėj esančiu įrašu.
Ačiū

Re: insert pries patikrindami

Jei loginas egzistuoja, reiškias įrašas yra, tada tikrinam pagal asm_id, jei toks neegzistuoja, tada updatinam, kitu atveju jei loginas neegzistuoja, reiškias naujas įrašas. Ar ne taip?

3 (edited by JuliusGr 2011-05-30 11:40:17)

Re: insert pries patikrindami

Aš jau įsivaizduoju, kaip turėtų atrodyti šie trys tikrinimai, ir antru pavyzdžiu aš bandau įgyvendint tik unikalių įrašų įterpimą (jei toks įrašas yra duomenų bazėj, jo neįterpiam), bet problema yra pačiu įrašų tikrinimas, kurie yra CSV faile...

Kažkaip reikia man išsiimti po vieną įrašą csv faile ir jį sutirkinti su duomenų baze, prieš įterpiant.

Kitaip apžvelgsiu problemą :):
turiu 30 studentų csv failą. Per šį skirtuką sumetu juos į db, viskas ok.. Showing rows 0 - 29 (30 total).
ištrinu iš db kas antrą įrašą, kaip pvz, tada lieka Showing rows 0-14, (15 total).
tada vėl tą patį csv failą paduodu su tais pačiais 30 studentų, ir rezulatas gaunasi - 0-44 (45 total) (kur 15 įrašų yra duplikuoti)
nors rezultate noriu gauti tuos pačius 30 unikalių įrašų.

Re: insert pries patikrindami

pdarayk asm_id unikalu stulpeli, tad MySql tau neleis iterpti antra karta to paties iraso.

Toliau iterpimas ar atnaujimas taip pat sprendziamas MySQL pagalba http://dev.mysql.com/doc/refman/5.0/en/ … icate.html