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.661 pregleda

Najnovija ↓

Problem sa upitom join 27.05.2008. u 08:31 · pre 224 meseca #1
ovako imam sledeci upit
Code:
SELECT  c.clanskibroj,c.ime,c.prezime,c.jmbg,c.adresa,c.grad,u.iznos,u.datumuplate,
if(IFNULL(u.zaGodinu,'NE')='NE','NE','DA') as uplaceno from clanovi c left join uplate u on
c.clanskibroj=u.uplacujesifra 
where u.zaGodinu='2008' or u.zaGodinu is null group by u.zagodinu,u.uplacujesifra


Kratko objasnjenje upita bi bilo da iz tablice clanovi povuce sve clanove i ispita da li su za datu godinu uplatili clanarinu što je upisano u tablicu uplate.
Problem je što ovo radi ok za članove koji nisu nikad ništa uplatili, ali ako imam člana koji je uplatio za 2007 a nije za 2008 nikako mi se ne pojavljuje.. kako ovo riješiti da mi se članovi pojavljuju i da kod uplaceno pise DA ako su uplatili za godinu i NE ako nisu

hvala na pomoci
Potpis
Give me six hours to chop down a tree and I will spend the first four sharpening the axe.
Re: Problem sa upitom join 27.05.2008. u 08:44 · pre 224 meseca #2
Naravno, kad imas uslov where u.zaGodinu='2008'. Probaj to izbaciti (ne znam kako imas mogucnost da ti je zagodinu=null).
Potpis
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
Re: Problem sa upitom join 27.05.2008. u 08:54 · pre 224 meseca #3
pa kako cu onda znati da li je uopste nesto u toj godini... treba mi da znam ko je platio u toj godini a ko nije od postojecih clanova
Potpis
Give me six hours to chop down a tree and I will spend the first four sharpening the axe.
Re: Problem sa upitom join 27.05.2008. u 09:27 · pre 224 meseca #4
Pozd.

Prvo, ova konstrukcija je nepotrebno zakomplikovana:

if(IFNULL(u.zaGodinu,'NE')='NE','NE','DA')

Ovo se lepshe pishe ovako:

IF(u.zaGodinu is NULL, 'NE', 'DA')

A drugo, WHERE uslov je filtrirajuci uslov, bez obzira na vrstu JOIN-a. U tvom sluchaju, join odradi posao, medjutim ti fizichki izfiltrirash sve one koji nemaju uZaGodinu=2008. LEFT OUTER JOIN ce imati NULL vrednosti samo ako u joinovanoj tabeli nije pronadjen uslov joina.

Znachi reshenje je da uslov u.zaGodinu morash podici u uslov JOIN-a, dok u WHERE zadrzhavash samo u.zaGodinu is null.

Svako dobro.
Re: Problem sa upitom join 27.05.2008. u 10:41 · pre 224 meseca #5
hvala na optimizaciju if(IFNULL(u.zaGodinu,'NE')='NE','NE','DA')
ali onaj uslov nikako ne ide:(
Potpis
Give me six hours to chop down a tree and I will spend the first four sharpening the axe.
Re: Problem sa upitom join 27.05.2008. u 10:59 · pre 224 meseca
izmenjeno 1 put, poslednji put Shinhan 27.05.2008. u 11:10
  1. Shinhan27.05.2008. u 11:10zapis iz teksta poruke
#6
Što je stsung rekao:

SELECT c.clanskibroj,c.ime,c.prezime,c.jmbg,c.adresa,c.grad,u.iznos,u.datumuplate,IF(u.zagodinu IS NULL,'NE','DA') AS uplaceno
FROM clanovi AS c
LEFT JOIN uplate AS u ON c.clanskibroj=u.uplacujesifra AND u.zaGodinu = '2008'
GROUP BY u.uplacujesifra

Samo, ja sam izbacio i u.zagodinu iz GROUP BY pošto je to redundantno. Nego, el si siguran da nećeš da sortiraš po nekom polju?

EDIT:
stsung je pogrešio ili te nije dobro razumeo. Zanemari "dok u WHERE zadrzhavash samo u.zaGodinu is null.". Vidi kod koji sam ja napisao, to sam testirao i definitivno radi.
Potpis
"Common sense is not so common." - Voltaire
Re: Problem sa upitom join 27.05.2008. u 11:17 · pre 224 meseca #7
Pozd.

Ako sam dobro razumeo, postavka zadatka glasi: Izlistaj sve chlanove iz baze, sa njihovim statusom placene chlanarine za godinu 2008. Moja greshka za WHERE uslov, zaboravio sam da trebaju svi.

Pride josh jedna napomena: uopshte nisam ni primetio da si koristio GROUP BY u upitu. Ti koristish GROUP BY za 2 polja dok ostala polja u SELECT nisu agregati. Ovakva konstrukcija je NEISPRAVNA. @Shinhan, kod tebe je takodje ovo prisutno.

Znachi finalni kod, kad vec moramo da otkrijemo konachno reshenje je:

Code:

SELECT  c.clanskibroj,c.ime,c.prezime,c.jmbg,c.adresa,c.grad,u.iznos,u.datumuplate,IF(u.zaGodinu is NULL,'NE','DA') AS uplaceno 
FROM clanovi c 
LEFT OUTER JOIN uplate u ON (c.clanskibroj=u.uplacujesifra AND u.zGodinu='2008') 


Eventualno posle ovoga neki order po prezimenu ili imenu.

Svako dobro.
Re: Problem sa upitom join 27.05.2008. u 11:52 · pre 224 meseca #8
to je to :) thnx
Potpis
Give me six hours to chop down a tree and I will spend the first four sharpening the axe.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme