Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]if, else w zapytaniu SQL
Forum PHP.pl > Forum > Przedszkole
meehow18
Witam,
mam takie zapytanie,

  1. SELECT FROM_UNIXTIME(1800 * FLOOR(date/1800)) AS period_start, COUNT(*) AS count FROM readed_messages
  2. GROUP BY period_start ORDER BY period_start ASC


Jak do niego dorobić klauzule if/else.
Jeśli istnieje jakiś taki rekord to zwraca count, a jesli nie to 0.

Bo obecnie zapytanie liczy mi ilość dodanych rekordów do tabeli w przedziale co 15 min, ale jeśli w danym przedziale nie było dodanego zadnego rekordu go nie podaje. A chciałbym aby zwracało 0 wink.gif
KsaR
Cytat(meehow18 @ 27.05.2015, 00:07:31 ) *
Witam,
mam takie zapytanie,

  1. SELECT FROM_UNIXTIME(1800 * FLOOR(date/1800)) AS period_start, COUNT(*) AS count FROM readed_messages
  2. GROUP BY period_start ORDER BY period_start ASC


Jak do niego dorobić klauzule if/else.
Jeśli istnieje jakiś taki rekord to zwraca count, a jesli nie to 0.

Bo obecnie zapytanie liczy mi ilość dodanych rekordów do tabeli w przedziale co 15 min, ale jeśli w danym przedziale nie było dodanego zadnego rekordu go nie podaje. A chciałbym aby zwracało 0 wink.gif


  1. SELECT FROM_UNIXTIME(1800 * FLOOR(date/1800)) AS period_start, IFNULL(COUNT(*),0) AS `count` FROM readed_messages
  2. GROUP BY period_start ORDER BY period_start ASC

Spróbuj tak.

Edit:
Tag mysql zepsuł tongue.gif.

Edit2:
Poprawiłem zapytanie.
meehow18
Dalej jest niestety od 1
mmmmmmm
A jakim cudem COUNT może zwracać NULL lub wartość <0 questionmark.gif
Xelah
MySQL (a szczególnie GROUP BY) działa na danych, które SĄ w bazie. Jedyne, co możesz zrobić, to dodatkową tabelę, która będzie zawierała wszyskie możliwe wartości period_start i potem zrobić LEFT JOIN na niej.

Inaczej sobie tego nie wyobrażam.
robertpiaty
Jest też inny spartański pomysł bazujący na tym co napisał Xelah. Zamiast tworzyć dodatkową tabelę na stałę w bazie możesz sobie wygenerować w PHP fragment sqlki z unionami z przedziałem czasowym który Cię interesuje. Poniżej fragment prezentujący mój pomysł. Nie wiem na ile to będzie wydajne.

  1. ...
  2. FROM
  3. (
  4. SELECT '10:00:00' AS time_data
  5. UNION
  6. SELECT '10:15:00' AS time_data
  7. UNION
  8. SELECT '10:30:00' AS time_data
  9. ) AS period_data
  10. JOIN
  11. ...
meehow18
To ja się w takim razie zastanawiam jak są tworzone wszystkie statystyki i wykresy dotyczace odwiedzic, dodanych nowych rekordów w ciągu ostatnich x dni, aby było to zrobione optymalnie.
Xelah
Na przykład poprzez post-processing po stronie aplikacji, która uzupełnia brakujące rekordy. Szybkie i skuteczne.
Pewnie są i inne metody, (jak procedury po stronie bazy) ale wszystko zależy od aplikacji.
mmmmmmm
Normalnie są robione statystyki. Albo z kostki OLAPowej, albo z BI, albo (co najbardziej prawdopodobne) z dodatkowej tabeli z periodami.
Damonsson
Cytat(meehow18 @ 27.05.2015, 17:19:06 ) *
To ja się w takim razie zastanawiam jak są tworzone wszystkie statystyki i wykresy dotyczace odwiedzic, dodanych nowych rekordów w ciągu ostatnich x dni, aby było to zrobione optymalnie.

Na pewno nie w MySQL wink.gif
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.