Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> date() z php w mysql - wybieranie przedziału czasu
AceDude
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 17.11.2006

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


Mam sobie dane statystyczne zapisane w bazie mysql - tabela ma prostą strukturę - pola `data` i `liczba`. Aby wyświetlić dane z ostatniego okresu - wystarczy sobie dodać polecenie "LIMIT 10" na końcu. Ale co w wypadku, kiedy chcę pokazać dane z ostatniego tygodnia (ostatnie 7 dni - potrzebna jest mi suma pola `liczba` dla każdego z nich)?
Może ktoś z was przeszedł już przez ten problem, albo ma namiary na jakiś tutorial?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Cezar708
post
Post #2





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


pokombinuj z BETWEEN, GROUP BY oraz SUM() a na pewno Ci to wystarczy do osiągnięcia Twojego celu

Pozdrawiam
Go to the top of the page
+Quote Post
AceDude
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 17.11.2006

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


Na szybko patrząc - to i tak będę musiał osobno liczyć przedziały dla każdego dnia i zrobić zapytanie - molocha. Jeżeli nie mam racji - popraw mnie.
Go to the top of the page
+Quote Post
Cezar708
post
Post #4





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


chcesz da każdego dnia tygodnia wyciągnąć sumę punktów z danego dnia.. w zasadzie ciekawy problem,

Ja najszybciej to zrobiłbym kilka zapytań, ale sprawdzę czy jest jakaś inna możliwość pogrupowania po dniach w tygodniu za pomocą group by.

Jak coś znajdę dam znać

Pozdrawiam
Cezar708

a spróbuj tak:
  1. SELECT DAYOFWEEK(DATA) AS day, sum(liczba)
  2. FROM twoja_tabela WHERE DATA BETWEEN '<dataOd>' AND '<dataDo>'
  3. GROUP BY day;


i powiedz czy zadziałało (sam nie mam na czym sprawdzić (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) )

Pozdro

EDIT:

tak nie pójdzie jak powyżej :
  1. SELECT DAYOFWEEK(DATA), sum(liczba)
  2. FROM twoja_tabela WHERE DATA BETWEEN '<dataOd>' AND '<dataDo>'
  3. GROUP BY 1;


tak chyba będzie lepiej.. ale trzeba sprawdzić (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) daj znać jak poszło oki?

Pozdro!
Go to the top of the page
+Quote Post
AceDude
post
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 17.11.2006

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


Dzięki, yakotako działa:
  1. DAYOFWEEK(DATA) sum(liczba)
  2. NULL 1540


Tylko, że nie pogrupowało dniami - pewnie tak być nie miało, ale na czytanie manuala nie mam dzisiaj czasu. (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Jutro coś jeszcze pokombinuję. Fajnie byłoby to zamknąć w jednym zapytaniu.
Go to the top of the page
+Quote Post
Cezar708
post
Post #6





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


a ja popróbowałem ten drugi przykład... i mi działa, ewentualnie można zamiast dayofweek() użyć dayofyear() generalnie mam wszystko ładnie pogrupowane w jednym zapytaniu... wydaje mi się, że jest dobrze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam
Go to the top of the page
+Quote Post
AceDude
post
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 17.11.2006

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


Ha, śmiga. Dzięki. Cudotwórca z ciebie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

  1. SELECT DAYOFYEAR( FROM_UNIXTIME(
  2. DATA ) ) , sum( liczba )
  3. FROM dane WHERE DATA BETWEEN '1223100000' AND '1223419603'
  4. GROUP BY 1
  5. LIMIT 0, 30


Ten post edytował AceDude 6.10.2008, 20:45:34
Go to the top of the page
+Quote Post
Cezar708
post
Post #8





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


you're welcome

Pozdr
Cezar708
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 - 23:22