[ predic @ 25.12.2009. 15:41 ] @
| Imam problem kako da resim sledeci zadatak:
Postoje dve tabele:
Korisnici(id_korisnika, naziv, status) i
Uplate(id_uplate, datum, id_korisnika).
Potrebno je da azuriram sva polja status na vrednost 'razvijen' u tabeli Korisnici ukoliko imaju vise od 10 uplata.
Lako napisem upit koji mi prikaze sve korisnike koji imaju preko 10 uplata.
Primer:
Code:
SELECT uplate.id_korisnika
FROM uplate
GROUP BY id_korisnika
HAVING COUNT(id_uplate)>10;
Ali nisam siguran kako bih sada azurirao polje status iskljucivo za korisnike preko 10 uplata !!!
Pretpostavljam da bih koristio INNER JOIN u UPDATE iskazu ali vec nekoliko pokusaja i nikako da uspe.
Probao sam ovako nesto:
Code:
UPDATE clanovi
INNER JOIN (SELECT uplate.id_korisnika
FROM uplate
GROUP BY id_korisnika
HAVING COUNT(id_uplate)>10) AS g
ON korisnici.id_korisnika=g.id_korisnika
SET korisnici.status = "razvijen";
Moze pomoc? |
[ Getsbi @ 25.12.2009. 22:34 ] @
Mislim da podupit, kao što je tvoj prvi, ne može da bude deo Update Query-ja, jer koristi funkcije za izračunavanje. Takvi query-ji su ne editabilni.
Pokušaj da napišeš Make-Table Query. Kad budeš imao dodatnu tabelu kao izvor, moći ćeš da uradiš ažuriranje tvoje tabele Korisnici putem Update Query-ja.
[ predic @ 26.12.2009. 08:26 ] @
To je ok.
Resenje sa Make Table Query-jem naravno da radi ali to su vec 2 koraka. Zeleo sam to da izbegnem.
Znam da mi upit nije editabilan zbog izracunavanja, ali ne vidim drugaciji nacin kako da dobijem informaciju o korisnicima koji imaju vise od 10 uplata,
a da potom azuriram polje u Korisnicima.
Da li postoji nacin da napisem jedan upit koji ce azurirati polje svakog korisnika preko 10 uplata?
[ domaci_a_nas @ 27.12.2009. 11:51 ] @
Siguran sam da su ta dva koraka sve zajedno brža od jednog koraka koji bi ih menjao, a jedino mi na pamet pada DCount.
[ maliradoznalac @ 27.12.2009. 13:49 ] @
Da li postoji jos neki status? Iz ovog sto si do sada napisao ispada da ima status razvijen i nije razvijen!
I od cega zavisi status? Samo od broja uplata? ako je tako, zasto jednostavno ne prebrojis uplate. Do 10 i preko 10 uplata. Prebrojavanje u jednoj tabeli je veoma brza operacija.
Ja licno sve sto se dobija na osnovu nekog racuna ne stavljam u tabele. Tako su me naucili :-)
[ predic @ 28.12.2009. 10:41 ] @
Ma i mene isto ucili.. :)
U statusu se unosi obican tekst, nije ni bitno gledati sta se unosi.
Poenta je da iz tabele Uplate dobijem id korisnika koji imaju vise od 10 uplata,
a onda na osnovu te informacije da azuriram polje status na neku vrednost za svakog takvog korisnika.
Kao sto rekoh, lako dobijem informaciju koji su ti korisnici iz tabele Uplate, i lako azuriram statuse tih korisnika u tabeli Korisnici.
To su jednostavni upiti.
Ali ne znam da li je moguce napisati u jednom upitu sve to..
[ captPicard @ 29.12.2009. 08:03 ] @
Možda ovako:
Code:
UPDATE clanovi SET status='razvijen' where
id_korisnika IN
(SELECT uplate.id_korisnika
FROM uplate
GROUP BY id_korisnika
HAVING COUNT(id_uplate)>10)
[ predic @ 29.12.2009. 08:34 ] @
Bravo care :) radi
[ captPicard @ 29.12.2009. 09:35 ] @

Drago mi je da sam pomogao!

Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.