Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Grupowanie danych według roku i miesiąca - Datetime
Tidude
post
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 10.08.2011

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


Cześć.
Próbuję zrobić sobie tabelkę z informacjami o ilości zarejestrowanych użytkowników.
Chciałbym, żeby wyglądała ona tak:
  1. 2012:
  2. styczeń 10
  3. luty 5
  4. marzec 11


Gdzie liczby 10,5,11 to ilość osób zarejestrowanych w danym miesiącu.
Udało mi się napisać skrypt, który tworzy następującą tabelę.
  1. 2012:
  2. styczeń
  3. luty
  4. marzec

I mam problem z wyciągnięciem ilości użytkowników z danego miesiąca. Według poniższego kodu, pokazuje mi że w danym miesiącu zarejestrował się jeden użytkownik, choć było ich więcej. Doszedłem do wniosku, że to przez linijkę $ilosc = $row['ilosc']; bo dodałem ją w złym miejscu, a nie wiem jak ją dodać w innym.

  1. $query = "select count(*) as ilosc, DATE_FORMAT(data_rejestracji,'%Y-%m') as month, DATE_FORMAT(data_rejestracji,'%Y') as year FROM uzytkiwnicy GROUP BY month ORDER BY data_rejestracji";
  2. $result = mysql_query($query) or die(mysql_error());
  3.  
  4. $storage_array = array();
  5. while($row = mysql_fetch_assoc($result)) {
  6. $year = $row['year'];
  7. $month = $row['month'];
  8. $ilosc = $row['ilosc'];
  9. $storage_array[$year][] = $month;
  10. }
  11.  
  12. foreach ($storage_array as $year => $month_array){
  13. echo "<ul class='year'><li><a>{$year}</a>";
  14. foreach ($month_array as $month){
  15. echo "<ul class='months'><li><a>{$month} {$ilosc}</a></li></ul>
  16. ";
  17.  
  18. }
  19. echo "</li></ul>";
  20. }


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Tidude
post
Post #2





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 10.08.2011

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


Dalej nie mogę sobie poradzić z tym by wyświetlało mi w tabeli 12 miesięcy, i te w których nikt się nie zarejestrował by pokazywało wynik 0.

Znalazłem pewien kod, który niby rozwiązuje mój problem. Lecz nie mogę dojść z nim do ładu, nie wiem jak wykonać do niego zapytanie.


Chciałbym otrzymać właśnie taką tabelę jak ta poniżej.
  1. |Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec |
  2. --------+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  3. 2001 | 0 | 0 | 0 | 0 | 0 | 0 | 100$ | 0 | 0 | 0 | 0 | 50$ |
  4. --------+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  5. 2002 | 30$ | 0 | 0 | 0 | 90$ | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
  6. --------+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  7. 2003 | 0 | 0 | 0 | 0 | 0 | 80$ | 0 | 0 | 20$ | 0 | 0 | 0 |


Ja bym chciał, żeby zamiast dolarów wyświetlało mi ilość zarejestrowanych użytkowników w danym miesiącu, mam tabelę "uzytkownicy" z kolumną "data_rejestracji".

  1. $array = array ("7/2001:100$", "12/2001:50$" , "1/2002:30$" , "5/2002:90$" , "6/2003:80$","9/2003:20$" );
  2.  
  3. $prefill = array_fill(1,12,0);
  4. $years_array = array();
  5.  
  6. foreach($array as $value){
  7. list($date , $amount) = explode(":" , $value);
  8. list($month , $year) = explode("/" , $date);
  9.  
  10. if(!$years_array[$year]) $months_data = $prefill;
  11. else $months_data = $years_array[$year];
  12.  
  13. $months_data[$month] = $amount;
  14. $years_array[$year] = $months_data;
  15. }
  16.  
  17. echo "| Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | <br>";
  18. ksort($years_array);
  19. foreach($years_array as $year => $year_row){
  20. echo $year." | ";
  21. echo implode(" | " , $year_row);
  22. echo "<br>";
  23. }


Ten post edytował Tidude 22.07.2013, 12:49:03
Go to the top of the page
+Quote Post

Posty w temacie


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: 6.10.2025 - 12:55