Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> NVL w MySQLu jak to zrobic, chce miec ZERO gdy nie ma wartosci.
mysz0n
post
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 16.08.2006
Skąd: szy-ły

Ostrzeżenie: (0%)
-----


witam mam takie pytanie do bazy

  1. SELECT k.id_statusu, count(k.id_statusu), s.id_statusu, s.nazwa_statusu
  2. FROM klienci k, statusy s
  3. WHERE k.id_statusu = s.id_statusu
  4. GROUP BY k.id_statusu


działa spoko, problem w tym, że statusów mam 5, a on wyświetla tylko 2 (ponieważ na chwile obecną tylko 2 są używane).
jak już w zapytaniu zrobić coś takiego, IF COUNT IS NULL to count(k.id_statusu) = 0
cos identycznego jak NVL w oraclu, czytalem cos o CASE - ale nie umiem zastosować :/
?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
EarthCitizen
post
Post #2





Grupa: Zarejestrowani
Postów: 286
Pomógł: 70
Dołączył: 13.01.2009

Ostrzeżenie: (0%)
-----


Nie jestem pewny, ale:
Kod
IF(k.id_statusu IS NULL, 0, COUNT(k.id_statusu)) AS ile
Go to the top of the page
+Quote Post
mysz0n
post
Post #3





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 16.08.2006
Skąd: szy-ły

Ostrzeżenie: (0%)
-----


niestety takie cos:

  1. SELECT k.id_statusu, IF( k.id_statusu IS NULL , 0, COUNT( k.id_statusu ) ) AS ile, s.id_statusu, s.nazwa_statusu
  2. FROM klienci k, statusy s
  3. WHERE k.id_statusu = s.id_statusu
  4. GROUP BY k.id_statusu


nie działa, nie wyrzuca błędu, ale nie zwraca tez wierszy z cyferką 0 :/
Go to the top of the page
+Quote Post
kitol
post
Post #4





Grupa: Zarejestrowani
Postów: 162
Pomógł: 26
Dołączył: 19.01.2007

Ostrzeżenie: (0%)
-----


może coś w ten deseń (pisane z palca):
  1. SELECT k.id_statusu, count(k.id_statusu), s.id_statusu, s.nazwa_statusu
  2. FROM statusy s
  3. LEFT JOIN klienci k ON k.id_statusu = s.id_statusu
  4. GROUP BY s.id_statusu
Go to the top of the page
+Quote Post
kefirek
post
Post #5





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

Ostrzeżenie: (0%)
-----


Zobacz tak powinno dzialac
  1. SELECT k.id_statusu, count(k.id_statusu), s.id_statusu, s.nazwa_statusu,
  2. CASE count(k.id_statusu) WHEN 'NULL' THEN '0' ELSE count(k.id_statusu) END AS wynik
  3. FROM klienci k, statusy s
  4. WHERE k.id_statusu = s.id_statusu
  5. GROUP BY k.id_statusu


W kolumnie wynik masz liczbe 0 gdy jest NULL lub liczbe zliczoną przez count gdy nie jest null

Ten post edytował kefirek 23.01.2009, 12:44:12
Go to the top of the page
+Quote Post
mysz0n
post
Post #6





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 16.08.2006
Skąd: szy-ły

Ostrzeżenie: (0%)
-----


nie działa, ale może wytłumaczę jeszcze jak ta baza u mnie wygląda - bo może zupełnie inaczej trzeba się za to zabrać.
mam tabele stausy a w niej ID_statusu | nazwa statusu (mam: 1,podłączony; 2,niepodłączony;3,zainteresowany;4odłączony) i tabele z klientami gdzie mam całą masę informacji w tym id_klienta i id_statusu. i teraz chciałbym sobie zrobić menu - w ktorym pokazałoby mi się że podłączonych mam 60 klientów, niepodłączonych 20, a zainsteresowanych 0 i odłączonych 0.
to zapytanie które na samym szczycie wkleiłem działa dobrze ale pomija te wartości (zainteresowany i odłączony) z tabeli statusy - które nie są przypisane żadnemu klientowi - wiec chyba nawet tego nie wyciąga z bazy. ale czy jest jakaś opcja zeby w tym samym zapytaniu wyciągnął to z bazy i napisał 0 ?
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Pobierz statusy i counta i dolacz (LEFT JOIN) klientow i group po id statusu:

Lekko zmodyfikowany Kod @kitol'a powinien dzialac

  1. SELECT s.id_statusu, s.nazwa_statusu, count(k.id_statusu)
  2. FROM statusy s
  3. LEFT JOIN klienci k ON k.id_statusu = s.id_statusu
  4. GROUP BY s.id_statusu


to da ci 0 dla statusow dla ktorych brak klienta
Go to the top of the page
+Quote Post
mysz0n
post
Post #8





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 16.08.2006
Skąd: szy-ły

Ostrzeżenie: (0%)
-----


dzieki dj_bonzo działa jak powinno, nie wiem dlaczego ale zawsze unikałem LEFT i RIGHT JOINów, zawsze robiłem tak jak pokazałem, ale widze ze będe się musiał także do tej metody przekonać.
jeszcze raz dzieki!
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Twoja notacja to po prostu INNER JOIN, a potrzebujesz OUTERA (co daje ci LEFT/RIGHT JOIN)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 12:42