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

Problem sa upitom join

[es] :: MySQL :: Problem sa upitom join

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mojeKorIme
BiH

Član broj: 59512
Poruke: 350
*.bpro.19522235-74.bih.net.ba.



+1 Profil

icon Problem sa upitom join27.05.2008. u 07:31 - pre 193 meseci
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
Give me six hours to chop down a tree and I will spend the first four sharpening the axe.
 
Odgovor na temu

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Re: Problem sa upitom join27.05.2008. u 07:44 - pre 193 meseci
Naravno, kad imas uslov where u.zaGodinu='2008'. Probaj to izbaciti (ne znam kako imas mogucnost da ti je zagodinu=null).

:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

mojeKorIme
BiH

Član broj: 59512
Poruke: 350
*.bpro.19522235-74.bih.net.ba.



+1 Profil

icon Re: Problem sa upitom join27.05.2008. u 07:54 - pre 193 meseci
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
Give me six hours to chop down a tree and I will spend the first four sharpening the axe.
 
Odgovor na temu

stsung
NS

Član broj: 12899
Poruke: 432
213.137.123.*



+2 Profil

icon Re: Problem sa upitom join27.05.2008. u 08:27 - pre 193 meseci
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.
 
Odgovor na temu

mojeKorIme
BiH

Član broj: 59512
Poruke: 350
*.bpro.19522235-74.bih.net.ba.



+1 Profil

icon Re: Problem sa upitom join27.05.2008. u 09:41 - pre 193 meseci
hvala na optimizaciju if(IFNULL(u.zaGodinu,'NE')='NE','NE','DA')
ali onaj uslov nikako ne ide:(
Give me six hours to chop down a tree and I will spend the first four sharpening the axe.
 
Odgovor na temu

Shinhan
PHP programmer
Subotica

Član broj: 12327
Poruke: 372
91.150.127.*

Jabber: shinhan@elitesecurity.org
ICQ: 400847988


+4 Profil

icon Re: Problem sa upitom join27.05.2008. u 09:59 - pre 193 meseci
Š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.

[Ovu poruku je menjao Shinhan dana 27.05.2008. u 11:10 GMT+1]
"Common sense is not so common." - Voltaire
 
Odgovor na temu

stsung
NS

Član broj: 12899
Poruke: 432
213.137.123.*



+2 Profil

icon Re: Problem sa upitom join27.05.2008. u 10:17 - pre 193 meseci
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.
 
Odgovor na temu

mojeKorIme
BiH

Član broj: 59512
Poruke: 350
*.bpro.19522235-74.bih.net.ba.



+1 Profil

icon Re: Problem sa upitom join27.05.2008. u 10:52 - pre 193 meseci
to je to :) thnx
Give me six hours to chop down a tree and I will spend the first four sharpening the axe.
 
Odgovor na temu

[es] :: MySQL :: Problem sa upitom join

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

Postavi temu Odgovori

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