Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] grupowanie po dniu, case gdy w jakims dniu jest brak danych
Forum PHP.pl > Forum > Bazy danych > MySQL
Kishin
Witam,

Mam taki problem, wyciągam sobie dane z bazy dla 2 zespołów i grupuje po dacie(dni). Wszystko działa ok natomiast gdy w jakimś dniu niema danych dla zespołu to nic się nie wypisuje a potrzebowałbym aby wypisywało się 0
  1. (case
  2. when sum(dsa.ilosc) IS NULL then '0'
  3. else sum(dsa.ilosc)
  4. end
  5. )

cos takiego nie działa :/

Macie jakieś pomysły?
Sephirus
a

  1. IFNULL(sum(dsa.ilosc),0)


nie zadziała?

Najlepiej pokaż całe zapytanko.
Kishin
  1. SELECT dsa.Date dzien,sn.Dzial,
  2. sum(dsa.ilosc) ilosc, sec_to_time(sum(dsa.AUX4)) aux4,sum(dsa.transferred) transfer
  3. ,sum(dsa.log_time) zalogowanie, sum(dsa.AUX3) aux3
  4. FROM ira_stats.ira_stats_all dsa
  5. LEFT JOIN raporty.slownik_new sn ON (sn.complog=dsa.complog)
  6. WHERE dsa.date >= '2014-05-01' AND dsa.date <= '2014-05-13' AND sn.Dzial IN (werdi,play) AND dsa.type='all'
  7. GROUP BY sn.Dzial,dsa.Date
  8. ORDER BY dsa.Date ASC


tak wygląda zapytanie w oryginale, ifnull tez nie działa
Sephirus
To dużo wyjaśnia.

Przede wszystkim nie dostaniesz w prosty sposób danych - gdy ich nie ma...

Jeśli danego dnia, zespół nie ma danych to zapytanie nie ma skąd ich pobrać...

MySQL Ci tego w łatwy sposób nie zwróci... nie widzę na to prostego sposobu - albo sztucznie wygenerować rekordy dla brakujących dni z "0" albo zastosować jakąś procedurę - tak czy siak na łatwy sposób nie mogę wpaść...

Można podejść inaczej do zagadnienia.

W PHP przygotuj sobie tablicę, w której umieścisz rekordy od dnia startu zakresu (2014-05-01) do jego końca co 1 dzień i uzupełnij zerami:

  1. $d = new DateTime($data);
  2. $tablica = array();
  3. while($d->format('Y-m-d') != $dataKoncaZakresu) {
  4. $tablica[$d->format('Y-m-d')] = 0;
  5. $d->modify('+1 day');
  6. }


potem dla wyciągniętych z bazy rekordów pouzupełniaj te, które zostały zwrócone dla danej daty ich liczbami...

I masz gotową tabelę.

Musisz to oczywiście zrobić dla różnych działów itd. - przedstawiam tu pomysł rozwiązania - dalej kombinuj wink.gif
Kishin
  1. while($row = $result->fetchRow(MDB2_FETCHMODE_ASSOC))
  2. {
  3.  
  4. $dane['werdi'][$row['dzien']]=0;
  5. $dane['play'][$row['dzien']]=0;
  6.  
  7. }

taki myk i już mam tabele o której mówiłeś smile.gif. Tego potrzebowałem, dzięki za pomoc smile.gif

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.