Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Wyświetlenie danych z mysql według roku i miesiąca
Forum PHP.pl > Forum > Przedszkole
Evinek
Witam was.
Otóż tym razem mam problem z wyświetleniem danych z mysql do tabeli. Może najpierw obrazek pokaże jak by to miało wyglądać.

Jest to galeria. Każdy rok posiada miesiące. Lata będą od 2009 do aktualnego (czyli funkcją date() pobiorę aktualną date). Miesiące mają być wyświetlane wszystkie - w każdym roku.
Dane w bazie mam tak:
gid | title | date
ID | nazwa galerii | np. 2014-07-05

Kod tabeli w HTML to:
  1. <div class="year">
  2. <img src="<?= THEME_WWW ?>date/2012.jpg" alt="2012" width="200"/>
  3. </div>
  4. <tr class="month">
  5. <td>Styczeń</td>
  6. <td>Luty</td>
  7. <td>Marzec</td>
  8. </tr>
  9. <tr>
  10. <td>Nazwa1.1<br />Nazwa1.2<br />Nazwa1.3</td>
  11. <td>Nazwa2</td>
  12. <td>Nazwa3</td>
  13. </tr>
  14. <tr class="month">
  15. <td>Kwiecień</td>
  16. <td>Maj</td>
  17. <td>Czerwiec</td>
  18. </tr>
  19. <tr>
  20. <td>Nazwa1.1<br />Nazwa1.2<br />Nazwa1.3</td>
  21. <td>Nazwa2</td>
  22. <td>Nazwa3</td>
  23. </tr>
  24. <tr class="month">
  25. <td>Lipiec</td>
  26. <td>Sierpień</td>
  27. <td>Wrzesień</td>
  28. </tr>
  29. <tr>
  30. </tr>
  31. <tr class="month">
  32. <td>Październik</td>
  33. <td>Listopad</td>
  34. <td>Grudzień</td>
  35. </tr>
  36. <tr>
  37. <td>Nazwa1.1<br />Nazwa1.2<br />Nazwa1.3</td>
  38. <td></td>
  39. <td></td>
  40. </tr>
  41. </table>


Teraz pytanie. Jak mogę zrobić w pętli aby wszystko poprawnie wyświetlić? Każda galeria (link) aby była w danym miesiącu i roku?
Chodzi aby wyświetlić to chronologicznie.
erix
Pseudokod:

  1. $bufor = null;
  2.  
  3. while($r = <rekord>){
  4.  
  5. jeżeli bufor!=$r{
  6. nagłówek;
  7. }
  8.  
  9. wypisz;
  10.  
  11. }
Evinek
Jakoś nie zrozumiałem. Można jakoś jaśniej?

Myślałem i patrzałem na to przez 20 minut i nadal nie wiem dokładnie o co chodzi...
erix
Sortujesz wg daty i jeśli jest kolejny miesiąc, to rozpoczynasz nowy nagłówek. Wtedy wszystko trafia tam, gdzie trzeba.
Evinek
Tylko problem w tym, że te miesiące są porozdzielane inaczej.
Jest:
  1. <tr class="month">
  2. <td>Styczeń</td>
  3. <td>Luty</td>
  4. <td>Marzec</td>
  5. </tr>

A dopiero potem
  1. <tr>
  2. <td>Nazwa1.1<br />Nazwa1.2<br />Nazwa1.3</td>
  3. <td>Nazwa2</td>
  4. <td>Nazwa3</td>
  5. </tr>

Z latami ten sposób wyjdzie no i działa.

  1. $bufor = NULL;
  2. while($row = mysql_fetch_array($result))
  3. {
  4. //$photo .= $row['gid'].'<br />'.$row['title'].'<br />'.$row['date'].'<hr />';
  5. $y = date("Y", strtotime($row['date']));
  6. if($y != $bufor){
  7. echo '<div class="year">
  8. <img src="'.THEME_WWW.'date/'.$y.'.jpg" alt="2012" width="200"/>
  9. </div>';
  10. $bufor = $y;
  11. }
  12. echo $row['title'].'<br />';
  13. }


Tylko właśnie większy problem jest z tymi miesiącami.
Jak by było ułożone
Rok
-Miesiąc
--Galeria
-Miesiąc
--Galeria
--Galeria
Rok
-Miesiąc

To na pewno było by łatwiej.
erix
To zamień tabelę na listę wyliczeniową. Ustawiasz 33% szerokości i układa Ci się, jak chcesz.

W tym akurat przypadku, trzeba by było najpierw wygenerować tablicę z miesiącami albo gmerać via DOMDocument, co jest IMO trochę bez sensu...
Evinek
Ach, ależ to trudne.

  1. $bufor = NULL;
  2. $bufor2 = NULL;
  3. while($row = mysql_fetch_array($result))
  4. {
  5. //$photo .= $row['gid'].'<br />'.$row['title'].'<br />'.$row['date'].'<hr />';
  6. $y = date("Y", strtotime($row['date']));
  7. $m = date("n", strtotime($row['date']));
  8. if($y != $bufor){
  9. echo '<div class="year">
  10. <img src="'.THEME_WWW.'date/'.$y.'.jpg" alt="2012" width="200"/>
  11. </div>';
  12. $bufor = $y;
  13. }
  14. if($m != $bufor2){
  15. echo $m.'<br />';
  16. $bufor2 = $m;
  17. }
  18. echo $row['title'].' ~ '.$y.'::'.$m.'<br />';
  19. }

Przykładowy wynik:

Czyli ogólnie jest okej, tylko teraz muszę to zmontować aby był wynik taki:
  1. <div>
  2. <div class="big">
  3. <div class="block">
  4. <div class="month">Styczeń</div>
  5. Test<br />
  6. Test<br />
  7. Test<br />
  8. </div>
  9. <div class="block">
  10. <div class="month">Luty</div>
  11. Test<br />
  12. Test<br />
  13. Test<br />
  14. </div>
  15. <div class="block">
  16. <div class="month">Marzec</div>
  17. Test<br />
  18. Test<br />
  19. Test<br />
  20. </div>
  21. </div>
  22. <div class="big">
  23. <div class="block">
  24. <div class="month">Kwiecień</div>
  25. Test<br />
  26. Test<br />
  27. Test<br />
  28. </div>
  29. <div class="block">
  30. <div class="month">Maj</div>
  31. Test<br />
  32. Test<br />
  33. Test<br />
  34. </div>
  35. <div class="block">
  36. <div class="month">Czerwiec</div>
  37. Test<br />
  38. Test<br />
  39. Test<br />
  40. </div>
  41. </div>
  42. <div class="big">
  43. <div class="block">
  44. <div class="month">Lipiec</div>
  45. Test<br />
  46. Test<br />
  47. Test<br />
  48. </div>
  49. <div class="block">
  50. <div class="month">Sierpień</div>
  51. Test<br />
  52. Test<br />
  53. Test<br />
  54. </div>
  55. <div class="block">
  56. <div class="month">Wrzesień</div>
  57. Test<br />
  58. </div>
  59. </div>
  60. <div class="big">
  61. <div class="block">
  62. <div class="month">Październik</div>
  63. Test<br />
  64. </div>
  65. <div class="block">
  66. <div class="month">Listopad</div>
  67. Test<br />
  68. Test<br />
  69. Test<br />
  70. </div>
  71. <div class="block">
  72. <div class="month">Grudzień</div>
  73. Test<br />
  74. Test<br />
  75. Test<br />
  76. </div>
  77. </div>
  78. </div>

Najtrudniejsze jest dla mnie aby wyświetlić
  1. <div class="block">
  2. <div class="month">Grudzień</div>
  3. Test<br />
  4. Test<br />
  5. Test<br />
  6. </div>


Czyli muszę jakimś sposobem na początku wyświetlić przy miesiącu
  1. <div class="block">
  2. <div class="month">Grudzień</div>

A przy końcu
  1. </div>


Chyba myślę, że lepiej się opłaci dać te dane do tablicy $gallery[rok][miesiac] = $row['title'];
A później wyświetlić w pętli. Nie wiem jak później będzie z pamięcią - nie będzie za dużo danych?
Proszę jeszcze o rady. smile.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.