Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Wyświetlanie daty
Forum PHP.pl > Forum > Przedszkole
-Początkujący-
Wyświetlam wiadomości z bazy - działa świetnie.

  1. while($arr = $query->fetch_assoc()){
  2. echo date('H:i', $arr['time']).' '.$arr['autor'].': '.$arr['msg'];
  3. }


W bazie mam kolumne time i tam trzymam czas napisania wiadomosci jako unix timestamp.
Chciałbym teraz zrobić takie rozdzielenie co dzień, nie potrafie się za to zabrać.
Nie potrafie tego do konca wytłumaczyć, więc przykład jak to by miało wyglądać.

  1. Poniedziałek 22/08
  2. 22:22 Ktoś: coś..
  3. 22:22 Ktoś: coś..
  4. 22:22 Ktoś: coś..
  5. 22:22 Ktoś: coś..
  6. 22:22 Ktoś: coś..
  7. Niedziela 21/08
  8. 11:11 Ktoś: coś..
  9. 11:11 Ktoś: coś..
  10. 11:11 Ktoś: coś..
  11. 11:11 Ktoś: coś..
  12. 11:11 Ktoś: coś..


Jak to zrobić? Jakieś porady?
timon27
Ja bym to zrobił w php (wiele zapytań mysql).

Najpierw 'główne' zapytanie:

  1. SELECT from_unixtime(unix,'%Y-%m-%d') AS day FROM tabela GROUP BY day ORDER BY day DESC LIMIT 10


A potem w pętli php będę pobierał zmienną $day i wrzucał ją w małe zapytania:

  1. SELECT * FROM tabela WHERE from_unixtime(unix,'%Y-%m-%d')=$day
nospor
@timon, przepraszam, nie gniewaj sie, ale co ty wygadujesz?
Ma byc jedno zapytanie jak jest teraz, i tylko w php albo wyswietlasz dany dzien jak jeszcze nie bylo, albo tylko godzine gdy juz dzien byl.... to jest prosty warunek IF
Michael2318
Ma to wyglądać mniej więcej nastepująco:

masz tabelkę, nazwijmy ją ex_table, a w niej pola: id_field oraz time_field, gdzie pierwsze pole to unikalne ID danego rekordu, a drugie pole to po prostu nasz czas.

Teraz wyciągamy wszystkie nasze rekordy, sortując je od najnowszych do najstarszych:

  1. $sql = "SELECT * FROM `ex_table` ORDER BY time_field DESC";
  2. $day = ''; // Ta zmienna będzie rozpoznawała czy obecny rekord to już następny dzień, czy może ten sam
  3. $result = mysql_query($sql);
  4. while($row = mysql_fetch_assoc($result))
  5. {
  6. $now_day = date("z", $row['time_field']); // do tej zmiennej przypisujemy aktualny dzien roku 0-365 - to sie przyda do identyfikacji czy mamy do czynienia z tym samym dniem czy juz z nastepnym
  7. if ( $day !== $now_day ) // jesli mamy do czynienia z kolejnym dniem to...
  8. {
  9. $day = $now_day; // przypisujemy do zmiennej $day kolejny dzien roku
  10. echo date("l j/m", $row['time_field']).'<br>'date("H:i", $row['time_field']).'cos cos cos<br>'; // wyswietlamy pełną ang. nazwę tygodnia, miesiąc i dzień, a następnie godzinę i minutę + czynność o nazwie "cos cos cos"
  11. }
  12. else // jesli natomiast mamy do czynienia z tym samym dniem...
  13. {
  14. echo date("H:i", $row['time_field']).'cos cos cos<br>'; // wsywietlamy samą czynność
  15. }
  16. }


W komentarzach wszystko opisałem, jedyny mankament to to, że dni będą w języku angielskim. Możesz sobie napisać jakąś funkcję, która na sztywno zamieni w ciągu np. Monday na Poniedziałek itp.
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.