Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]if, else w zapytaniu SQL
meehow18
post
Post #1





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 10.01.2010

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


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 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
KsaR
post
Post #2





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


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 (IMG:style_emoticons/default/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ł (IMG:style_emoticons/default/tongue.gif) .

Edit2:
Poprawiłem zapytanie.

Ten post edytował Ksar 26.05.2015, 23:21:41
Go to the top of the page
+Quote Post
meehow18
post
Post #3





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 10.01.2010

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


Dalej jest niestety od 1
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


A jakim cudem COUNT może zwracać NULL lub wartość <0 (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
Xelah
post
Post #5





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 12.05.2013
Skąd: Hamburg

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


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.
Go to the top of the page
+Quote Post
robertpiaty
post
Post #6





Grupa: Zarejestrowani
Postów: 113
Pomógł: 18
Dołączył: 7.10.2007
Skąd: Pruszków

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


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. ...
Go to the top of the page
+Quote Post
meehow18
post
Post #7





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 10.01.2010

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


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.
Go to the top of the page
+Quote Post
Xelah
post
Post #8





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 12.05.2013
Skąd: Hamburg

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


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.
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #9





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Normalnie są robione statystyki. Albo z kostki OLAPowej, albo z BI, albo (co najbardziej prawdopodobne) z dodatkowej tabeli z periodami.
Go to the top of the page
+Quote Post
Damonsson
post
Post #10





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


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 (IMG:style_emoticons/default/wink.gif)
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: 22.08.2025 - 16:24