Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Select i insert if not exists u jednom upitu.

[es] :: MySQL :: Select i insert if not exists u jednom upitu.

[ Pregleda: 2007 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nnn
Tech Lead
Haxr.io
Beograd

Član broj: 16743
Poruke: 679
*.dynamic.isp.telekom.rs.



+87 Profil

icon Select i insert if not exists u jednom upitu.06.06.2010. u 14:29 - pre 168 meseci
Potrebno mi je u jednom upitu da uradim select, a ako podatak ne postoji, dodati ga.
Imam tabelu user(ID,Name,Points)
i sad potrebno je da u jednom upitu uradim
SELECT points FROM user WHERE name = 'xxx' Sad ako nema usera xxx da
INSERT INTO user('xxx',1500)

i da mi upit vrati 1500 ili ako je vec postojao, vratim poene koje ima.


Jel moguce ovako nesto uraditi i kako?

Hvala
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: Select i insert if not exists u jednom upitu.06.06.2010. u 16:36 - pre 168 meseci
A zar nije bolje da to rešiš u domain logici? Najpre odradiš taj select, pa ako ima potrebe za insert-om - odradiš ga, u suprotnom, imaš rezultat tog upita.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Select i insert if not exists u jednom upitu.06.06.2010. u 16:51 - pre 168 meseci
tako kako si napisao - ne moze

ono sto moze je (pod uslovom da je `name` UNIQUE kljuc - inace ne moze)

Code:

insert IGNORE into `user` (name, points) values ('xxx', 1500);
select points from `user` where name = 'xxx';


prvi ce da insertuje usera ako ne postoji, drugi ce da ti vrati vrednost. problem je sto to radi samo ako je `name` polje unique pa ne mozes da imas dva coveka sa istim imenom u bazi (sto uglavnom nije tacno!!!) tako da se bojim da ces morati neko inteligentnije resenje (npr ovo sto ti je nikola rekao, uradi select pa ako dobijes "nema" a ti onda odradi insert)
 
Odgovor na temu

nnn
Tech Lead
Haxr.io
Beograd

Član broj: 16743
Poruke: 679
*.dynamic.isp.telekom.rs.



+87 Profil

icon Re: Select i insert if not exists u jednom upitu.06.06.2010. u 17:11 - pre 168 meseci
Pa vec sam ga odradio tako select pa ako nema rezultata onda insert. Sad ono sto me nervira kod toga, je program koji modifikujem za svaki upit pravi zasebnu nit i otvara konekciju ka serveru. -.- Tako je napisana klasa.. Ako bi mogao da sve to smestim u jedan upit, onda bi ustedeo, a to je bitno u ovom slucaju.. U principu moze name da bude jedinstveno posto je to user name, i ne mogu da imaju dva korisnika sa istim imenom.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Select i insert if not exists u jednom upitu.06.06.2010. u 17:25 - pre 168 meseci
ako mu stavis unique contraint onda ce insert ignore da ti odradi posao, samo izracunaj dal ti se isplati da izvrsavas UVEK dve naredbe ... tj kojih slucajeva imas vise - kada treba da dodas novog korisnika ili kad vec imas jednog ...

sto se tice dizajna te klase, otpustite tog lika koji je to dizajnirao
 
Odgovor na temu

nnn
Tech Lead
Haxr.io
Beograd

Član broj: 16743
Poruke: 679
*.dynamic.isp.telekom.rs.



+87 Profil

icon Re: Select i insert if not exists u jednom upitu.10.06.2010. u 23:30 - pre 168 meseci
Slicno pitanje, imam tabelu, koju treba da update, ako vec postoji korisnik, da povecam jedan brojac, a ako ne postoji da ga dodam i stavim na nulu. Jel postoji neki fazon za to, ili mora da se prvo proveri da li postoji pa doda ili update?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Select i insert if not exists u jednom upitu.10.06.2010. u 23:46 - pre 168 meseci
pogledaj MANUAL ?!

http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html


insert into `t1` (name, brojac) values ('pera', 0) on duplicate key update brojac = brojac + 1;


 
Odgovor na temu

Shinhan
PHP programmer
Subotica

Član broj: 12327
Poruke: 372
*.static.isp.telekom.rs.

Jabber: shinhan@elitesecurity.org
ICQ: 400847988


+4 Profil

icon Re: Select i insert if not exists u jednom upitu.11.06.2010. u 07:17 - pre 168 meseci
Citat:
bogdan.kecman: pogledaj MANUAL ?!

http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html


insert into `t1` (name, brojac) values ('pera', 0) on duplicate key update brojac = brojac + 1;


Jedna napomena. Ako je vrlo velika verovatnoća da record postoji a jako mala verovatnoća da record ne postoji, onda je bolje da napraviš normalan UPDATE, pa samo ako ti se vrati greška da uradiš INSERT ... ON DUPLICATE KEY ... jer je insert on update dosta sporiji od samo update.
"Common sense is not so common." - Voltaire
 
Odgovor na temu

[es] :: MySQL :: Select i insert if not exists u jednom upitu.

[ Pregleda: 2007 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.