[ 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 ] @
Citat:
predic: Bravo care radi


Drago mi je da sam pomogao!