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

Pomoc oko select upita

[es] :: MySQL :: Pomoc oko select upita

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bloker
R. Srpska

Član broj: 79958
Poruke: 216
79.143.174.*



+3 Profil

icon Pomoc oko select upita05.05.2009. u 11:45 - pre 182 meseci
Ne znam kako da napisem upit koji ce mi vratiti podatke za dva razlicita datuma.
ovako nekako:

select ime,adresa,duguje from korisnik where datum='2009-03-31';

e sad kako da u ovaj sql ubacim da mi vrati i polje "potrazuje" ali koje cu da vezem da "datum='2009-04-30'"
 
Odgovor na temu

bugsu
Vojvodina - Subotica

Član broj: 40006
Poruke: 381
77.46.204.*



+3 Profil

icon Re: Pomoc oko select upita05.05.2009. u 12:06 - pre 182 meseci
trebalo bi ovako


select ime,adresa,duguje AND potrazuje from korisnik where datum='2009-03-31';


ako sam te ja dobro razumeo,
Say NO to pop culture!!!
Crno je uvek u modi....
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: Pomoc oko select upita05.05.2009. u 14:25 - pre 182 meseci
Citat:
bloker:polje "potrazuje" ali koje cu da vezem da "datum='2009-04-30'"

Taj deo mi nije jasan... U kom smislu da ga "vežeš"?

Svejedno, probaj možda ovako nešto:
Code:

SELECT ime, adresa, duguje, (SELECT potrazuje FROM korisnik WHERE datum = '2009-04-30') AS 'potrazuje'
FROM korisnik 
WHERE datum = '2009-03-31';
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
217.24.31.*

Sajt: mysql.rs


+2377 Profil

icon Re: Pomoc oko select upita05.05.2009. u 20:04 - pre 182 meseci
Citat:
e sad kako da u ovaj sql ubacim da mi vrati i polje "potrazuje" ali koje cu da vezem da "datum='2009-04-30'"


NIKAKO a da ima smisla!!

ako hoces da ti vrati polje "pera" za datum "xyz" i polje "mika" za datum "xxx" .. to treba da uradis u dva upita ..

Code:

select ime,adresa,duguje from korisnik where datum='2009-03-31';


i

Code:

select mika from korisnik where datum='2009-04-30';


e sad .. mozes da ih spojis .. mada .. moras malo da mu das smisao .. posto samo po sebi - nema smisla

Code:

select d1.ime, d1.adresa,d1.duguje,d2.mika from tabela d1, tabela d2 where d1.id = d2.id and d1.datum='2009-03-31' and d2.datum='2009-04-30';



 
Odgovor na temu

bloker
R. Srpska

Član broj: 79958
Poruke: 216
79.143.174.*



+3 Profil

icon Re: Pomoc oko select upita06.05.2009. u 09:18 - pre 182 meseci
evo ta dva upita koje treba da spojim

Code:
SELECT (U.SIFRA)ULICA,(TRIM(U.NAZIV))ULICA_NAZ, (GR.SIFRA)GRUPA,(GR.NAZIV)GRUPA_NAZ,SUM(N.DUGUJE)DUGUJE FROM nalvoda AS N LEFT OUTER JOIN ulica AS U ON N.ULICAID=U.ID LEFT OUTER JOIN grupa_vod AS GR ON IF(N.KATEGORIJA=8,U.GRUPA=GR.SIFRA,U.GRUPA1=GR.SIFRA) WHERE N.DATD = '2009-03-31' AND N.KATEGORIJA = 8  AND GR.SIFRA=36 GROUP BY U.SIFRA;


Code:
SELECT (U.SIFRA)ULICA,(TRIM(U.NAZIV))ULICA_NAZ, (GR.SIFRA)GRUPA,(GR.NAZIV)GRUPA_NAZ,SUM(N.POTRAZ)POTRAZ FROM nalvoda AS N LEFT OUTER JOIN ulica AS U ON N.ULICAID=U.ID LEFT OUTER JOIN grupa_vod AS GR ON IF(N.KATEGORIJA=8,U.GRUPA=GR.SIFRA,U.GRUPA1=GR.SIFRA) WHERE N.DATD >= '2009-04-01' AND N.DATD <= '2009-04-30' AND N.KATEGORIJA = 8  AND GR.SIFRA=36 GROUP BY U.SIFRA;


znaci polja koja meni trebaju su: sifra ulice, naziv ulice, sifra grupe, naziv grupe, duguje, potrazuje

'DUGUJE' uzimam za datum 31.3.2009, a 'POTRAZ' za period od 1.4.2009 - 30.4.2009

ali posto mi ne odgovara da ovo ide u dva upita htio bih, naravno ako moze, da to smjestim u jedan..

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Pomoc oko select upita06.05.2009. u 12:41 - pre 182 meseci
sto se tice "ne odgovara da ide u 2 upita" .. ako ih zaokruzis transakcijom, nemas problem ...

sto se tice toga kako ti je dizajnirana baza - ne valja, pogledaj malo http://mysql.crsndoo.com/wp/tag/normalizacija/

sto se tice upita .. ima da bude sporoooooooooooooooooooo a i pitanje dal moze uopste

Code:


SELECT   (u.sifra)                                    ulica,
         (Trim(u.naziv))                              ulica_naz,
         (gr.sifra)                                   grupa,
         (gr.naziv)                                   grupa_naz,
         If(n.datd >= '2009-04-01'
            AND n.datd <= '2009-04-30',Sum(n.potraz),
            NULL) potraz,
         If(n.datd = '2009-03-31',Sum(n.duguje),NULL) duguje
FROM     nalvoda AS n
         LEFT OUTER JOIN ulica AS u
           ON n.ulicaid = u.id
         LEFT OUTER JOIN grupa_vod AS gr
           ON If(n.kategorija = 8,u.grupa = gr.sifra,u.grupa1 = gr.sifra)
WHERE    ((n.datd >= '2009-04-01'
           AND n.datd <= '2009-04-30')
           OR (n.datd = '2009-03-31'))
         AND n.kategorija = 8
         AND gr.sifra = 36
GROUP BY u.sifra;


da u ifu nisu agregatne funkcije radilo bi ... ali nisam nesto siguran kako ce da radi sa agregatnim funkcijama, morao bi da probas ... ako ne radi, onda moze da se napravi varijabla koju ce da tokom upita racuna .. ali i to je turbo sporo .. sve u svemu, tesko ces ovo da izvuces tako kako si zamislio

maaaaaalo brza varijanta bi bilo ... (uh koliko bi ovo bilo lakse da sam spavao bar 20min u zadnjih 48h :( )

Code:

SELECT t1.ulica, t1.ulica_naz, t1.grupa_naz, t1.duguje, t2.potraz from 
(
SELECT   (u.sifra)       ulica,
         (Trim(u.naziv)) ulica_naz,
         (gr.sifra)      grupa,
         (gr.naziv)      grupa_naz,
         Sum(n.duguje)   duguje
FROM     nalvoda AS n
         LEFT OUTER JOIN ulica AS u
           ON n.ulicaid = u.id
         LEFT OUTER JOIN grupa_vod AS gr
           ON If(n.kategorija = 8,u.grupa = gr.sifra,u.grupa1 = gr.sifra)
WHERE    n.datd = '2009-03-31'
         AND n.kategorija = 8
         AND gr.sifra = 36
GROUP BY u.sifra
) t1,
(
SELECT   (u.sifra)       ulica,
         (Trim(u.naziv)) ulica_naz,
         (gr.sifra)      grupa,
         (gr.naziv)      grupa_naz,
         Sum(n.potraz)   potraz
FROM     nalvoda AS n
         LEFT OUTER JOIN ulica AS u
           ON n.ulicaid = u.id
         LEFT OUTER JOIN grupa_vod AS gr
           ON If(n.kategorija = 8,u.grupa = gr.sifra,u.grupa1 = gr.sifra)
WHERE    n.datd >= '2009-04-01'
         AND n.datd <= '2009-04-30'
         AND n.kategorija = 8
         AND gr.sifra = 36
GROUP BY u.sifra
) t2
WHERE
t1.ulica = t2.ulica AND
t1. ulica_naz = t2.ulica_naz AND
t1.grupa_naz = t2.grupa_naz

samo sto ovde ova tri uslova iza where nisu bas 1/1 ... tu bi trebao neki primary key da se gadja e ne sira ulice ... no opet, ako je sifra ulice unique onda je to ok ... i onda samo to treba da ostane, ne treba sva 3 uslova da se gadjaju bez razloga ako je jedan dovoljan

javi pa probaj
 
Odgovor na temu

bloker
R. Srpska

Član broj: 79958
Poruke: 216
79.143.174.*



+3 Profil

icon Re: Pomoc oko select upita06.05.2009. u 12:58 - pre 182 meseci
Ovaj prvi upit mi za "duguje" izbacuje NULL
ovaj drugi radi ok.. mada sam mislio da postoji neko "elegantnije" resenje.. ali ok je ovaj radi posao..
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
217.24.31.*

Sajt: mysql.rs


+2377 Profil

icon Re: Pomoc oko select upita06.05.2009. u 13:24 - pre 182 meseci
postoji ali bi morao da znam strukturu baze i logiku gde se sta nalazi + morao bi da otspavam min 4h ... ali generalno, ne mozes elegantno da u upitu biras pola kolona po jednom uslovu a drugu polovinu po drugom uslovu .. to prosto nije sql filozofija .. tako da je ovo drugo resenje "resenje" .. pitanje je samo da li moze malo da se optimizuje
 
Odgovor na temu

[es] :: MySQL :: Pomoc oko select upita

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

Postavi temu Odgovori

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