PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
MySql - vältida topelt lisamist
Postitaja: geo__ 2008-02-18 12:40:26
Kuidas vältida topelt sisestusi (kui väli ei ole unique).

Sisestan palju andmeid korraga, stiilis:
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6),(5,5,6)...

a = unique, auto_increment
b = on date, aga sooviks et ei sisestaks kui selline kuupäev juba on tabelis.

Kuna andmeid on palju, siis lahendus 'Select > sorteeri > sisesta' ei sobi.

Kas seda SQL tasandil saab lahendada?



RE: MySql - vältida topelt lisamist
Postitaja: rtfm 2008-02-18 12:59:56
TSITEERITUD:
Kuidas vältida topelt sisestusi (kui väli ei ole unique).

Sisestan palju andmeid korraga, stiilis:
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6),(5,5,6)...

a = unique, auto_increment
b = on date, aga sooviks et ei sisestaks kui selline kuupäev juba on tabelis.

Kuna andmeid on palju, siis lahendus 'Select > sorteeri > sisesta' ei sobi.

Kas seda SQL tasandil saab lahendada?





miks unique ei sobi?
RE: MySql - vältida topelt lisamist
Postitaja: geo__ 2008-02-18 14:05:17
Njah tegelikult sobib unique ka.
Aga sellisel juhul oleks vaja errorist mööda saada.

script katkestab lisamise kui eksisteerib kordus.
RE: MySql - vältida topelt lisamist
Postitaja: rtfm 2008-02-18 14:06:23
TSITEERITUD:
Njah tegelikult sobib unique ka.
Aga sellisel juhul oleks vaja errorist mööda saada.

script katkestab lisamise kui eksisteerib kordus.


try & catch
RE: MySql - vältida topelt lisamist
Postitaja: geo__ 2008-02-18 16:28:41
TSITEERITUD:


try & catch


Kas saad lingi visata try & catch -i kohta.
Ei leidnud nagu midagi söödavat :\

Tänud ette.


RE: MySql - vältida topelt lisamist
Postitaja: rtfm 2008-02-18 17:24:01
RE: MySql - vältida topelt lisamist
Postitaja: hmz 2008-02-18 17:54:46
Ilmselt siiski lihtsaim teha unique indeks korraga väljadele a,b,c ja siis lisamisel saad mysql_affected_rows()==0 abil ju samuti kinni püüda, mitu korda üritati identset rida lisada. Mul töötab näiteks reklaamistatistika kogumine selle peal - iga banner kogub iga kuupäeva kohta db ühe rea peale klikke.
RE: MySql - vältida topelt lisamist
Postitaja: axelpaan_ 2008-02-18 19:55:17
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c;

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.h
RE: MySql - vältida topelt lisamist
Postitaja: geo__ 2008-02-19 11:04:01
TSITEERITUD:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c;

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.h


Tänud kõigile!
Sain toimima nii: (a ja b on Unique)
INSERT INTO tablename (a,b,c) VALUES ('','minu_stirng',3), ('',7,8) ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES(c);

Huvitav, et nii ei tööta:
...DUPLICATE KEY UPDATE b='minu_stirng', ...
Siis ei Update vaid väljastab errori Duplicate entry 'minu_stirng'

RE: MySql - vältida topelt lisamist
Postitaja: Endel 2008-02-19 18:49:47
TSITEERITUD:
Huvitav, et nii ei tööta:
...DUPLICATE KEY UPDATE b='minu_stirng', ...
Siis ei Update vaid väljastab errori Duplicate entry 'minu_stirng'


Nojah, ta ju üritab iga duplikaadi puhul sisestada b='minu_stirng', sel väljal on ju unique peal.


INSERT INTO tablename (a,b,c) VALUES ('','minu_stirng',3), ('',7,8) ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES(c);


Muuseas siin ei ole b=VALUES(b) tarvis enam määrata.

Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.0805268287659