Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP]Wyświetlenie danych z mysql według roku i miesiąca
Evinek
post 26.07.2012, 11:07:41
Post #1





Grupa: Zarejestrowani
Postów: 280
Pomógł: 46
Dołączył: 23.03.2010

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


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.
Go to the top of the page
+Quote Post
erix
post 26.07.2012, 11:11:49
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Pseudokod:

  1. $bufor = null;
  2.  
  3. while($r = <rekord>){
  4.  
  5. jeżeli bufor!=$r{
  6. nagłówek;
  7. }
  8.  
  9. wypisz;
  10.  
  11. }


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Evinek
post 26.07.2012, 12:07:01
Post #3





Grupa: Zarejestrowani
Postów: 280
Pomógł: 46
Dołączył: 23.03.2010

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


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...

Ten post edytował Evinek 26.07.2012, 12:07:39
Go to the top of the page
+Quote Post
erix
post 26.07.2012, 12:14:33
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Sortujesz wg daty i jeśli jest kolejny miesiąc, to rozpoczynasz nowy nagłówek. Wtedy wszystko trafia tam, gdzie trzeba.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Evinek
post 26.07.2012, 12:28:12
Post #5





Grupa: Zarejestrowani
Postów: 280
Pomógł: 46
Dołączył: 23.03.2010

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


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.
Go to the top of the page
+Quote Post
erix
post 26.07.2012, 13:02:06
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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...


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Evinek
post 27.07.2012, 17:40:28
Post #7





Grupa: Zarejestrowani
Postów: 280
Pomógł: 46
Dołączył: 23.03.2010

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


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

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 8.07.2025 - 05:49