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

Kako ga ispisem sve cak i kada nema vrednosti?

[es] :: MySQL :: Kako ga ispisem sve cak i kada nema vrednosti?

[ Pregleda: 1269 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ksrele
Programer - informatičar
Gold Drink D.O.O. Subotica
Subotica

Član broj: 14253
Poruke: 1642
*.dynamic.isp.telekom.rs.

ICQ: 66444502


+47 Profil

icon Kako ga ispisem sve cak i kada nema vrednosti?08.05.2010. u 21:22 - pre 170 meseci
Imam SELECT gde je JOIN-ovano vise tabela ali tako da osnovna tabela ima vise redova od kojih se neki ne pojavljuju u tabelama koje su JOIN-ovane i onda mi u ispisu izbacuje blanko polja a voleo bih da mi izbaci 0 (nulu kao broj) jer su u pitanju brojne vrednosti svakako. Dobro, to je manji problem, veci mi je problem kako da uradim filtriranje, tj WHERE klauzulu jer ja pretrazujem nesto sto u nekim poljima rezultata ne postiji.
Da pojasnim:
Kada dobijem rezultat prva kolona su (recimo) necija imena, ali nema svaka osoba zapis u bazi u vezi necega (recimo mesto i datum polaganja ispita) pa u tim redovima na nekim poljima (mesto i datum) dobijem blanko, NULL vrednost. Sto recimo nije problem, ali ja zelim da filtriram bas recimo po datumu sa WHERE datum < $neki_datum i to je OK jer zaista mi ne izbaci zapise koji se podilaze po ovo ali mi takodje ne izbaci ni one zapise gde nema nikakvog datuma a ja bih voleo da ih vidim.
Ne znam kako da objasnim bolje.
Recimo treba mi izmena WHERE upita na recimo:
Code (mysql):
 SELECT a.ime AS ime, b.datum AS datum, b.mesto AS mesto WHERE datum < $neki_datum OR datum == NULL;

ili da u samom SELECT-u napisem neku default vrednost
Code (mysql):
 SELECT a.ime AS ime, b.datum AS datum DEFAULT "1-1-2000", b.mesto AS mesto DEFAULT "nema_mesta" WHERE datum < $neki_datum;


Sta da radim?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Kako ga ispisem sve cak i kada nema vrednosti?08.05.2010. u 21:39 - pre 170 meseci
da ti je db model pravilno normalizovan - ne bi imao taj problem !

za proveru da li je nesto NULL imas funkciju IS NULL

http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html

ako hoces da NULL prikazes kao 0 koristi COALESCE

ako hoces da ti join izmedju nekoliko tabela sadrzi umnozak sa ili bez nekih slogova koji (ne)postoje koristi razlicite vrste JOIN-a (left, right / inner, outter ..)
 
Odgovor na temu

ksrele
Programer - informatičar
Gold Drink D.O.O. Subotica
Subotica

Član broj: 14253
Poruke: 1642
*.dynamic.isp.telekom.rs.

ICQ: 66444502


+47 Profil

icon Re: Kako ga ispisem sve cak i kada nema vrednosti?08.05.2010. u 22:16 - pre 170 meseci
Pa mislim da ne moze bolje da se uradi. A inace sam pocetnik (manje vise) i nisam bas najsigurniji kako sta da uradim...
Inace, mozda sam pogresio sto ovde pisem (na ovaj forum) ali nisam nasao SQLite forum a i radim preko VB.NET-a, ali kontam da je sve to isto kao i PHP i MySQL (sa kojim sam imao vise iskustava).
Dakle, ajde da dobijem konkretniji odgovor postavicu konkretno pitanje, znaci konkretne tabele su:

CREATE TABLE kontni_plan (ID_kon INTEGER PRIMARY KEY AUTOINCREMENT, br_konto TEXT, naziv TEXT, klasa TEXT, grupa TEXT)

CREATE TABLE "pocetno_stanje" ("ID_ps" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , "ID_kon" INTEGER, "iznos_dug" REAL, "iznos_pot" REAL)

CREATE TABLE "glavna_knjiga" ("ID_gk" INTEGER PRIMARY KEY ,"datum_knj" DATETIME,"datum_dok" DATETIME,"br_dok" TEXT,"vrsta_dok" INTEGER,"ID_kon" INTEGER,"ID_kom" INTEGER,"iznos_dug" REAL,"iznos_pot" REAL)

A ovo je moj query:

Code (mysql):

SQL_for_printing = "SELECT '" & dtp_dat_zaklj.Value & "' AS Datum, a.br_konto AS Konto, a.klasa AS klasa, a.grupa AS Grupa, CAST(SUM(b.iznos_dug) AS REAL) AS Duguje2, CAST(SUM(b. iznos_pot) AS REAL) AS Potrazuje2, CAST(c.iznos_dug AS REAL) AS Duguje1, CAST(c.iznos_pot AS REAL) AS Potrazuje1 FROM kontni_plan AS a  LEFT JOIN glavna_knjiga AS b ON a.ID_kon = b.ID_kon LEFT JOIN pocetno_stanje AS c ON a.ID_kon = c.ID_kon "
SQL_for_printing &= "WHERE b.datum_knj <= '" & Format(dtp_dat_zaklj.Value, "yyyy-MM-dd") & "' OR b.datum_knj = NULL "
SQL_for_printing &= "GROUP BY Konto;"
 
 
Odgovor na temu

ksrele
Programer - informatičar
Gold Drink D.O.O. Subotica
Subotica

Član broj: 14253
Poruke: 1642
*.dynamic.isp.telekom.rs.

ICQ: 66444502


+47 Profil

icon Re: Kako ga ispisem sve cak i kada nema vrednosti?08.05.2010. u 22:36 - pre 170 meseci
OK, hvala ti bogdan.kecman-u na pomoci, resio sam pomocu COALESCE() f-je koja, na moju srecu, postoji i u SQLite bazi.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Kako ga ispisem sve cak i kada nema vrednosti?08.05.2010. u 22:56 - pre 170 meseci
http://www.elitesecurity.org/f13-Baze-podataka - to je za "sve ostale" rdbms-e ukljucujuci i sqlite

coalesce je standardna sql funkcija, trebalo bi svi da to imaju


 
Odgovor na temu

[es] :: MySQL :: Kako ga ispisem sve cak i kada nema vrednosti?

[ Pregleda: 1269 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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