Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 2.843 pregleda

Najnovija ↓

Select i insert if not exists u jednom upitu. 06.06.2010. u 15:29 · pre 199 meseci #1
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
Re: Select i insert if not exists u jednom upitu. 06.06.2010. u 17:36 · pre 199 meseci #2
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.
Re: Select i insert if not exists u jednom upitu. 06.06.2010. u 17:51 · pre 199 meseci #3
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)
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Select i insert if not exists u jednom upitu. 06.06.2010. u 18:11 · pre 199 meseci #4
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.
Re: Select i insert if not exists u jednom upitu. 06.06.2010. u 18:25 · pre 199 meseci #5
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
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Select i insert if not exists u jednom upitu. 11.06.2010. u 00:30 · pre 199 meseci #6
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?
Re: Select i insert if not exists u jednom upitu. 11.06.2010. u 08:17 · pre 199 meseci #8
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.
Potpis
"Common sense is not so common." - Voltaire
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme