Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL]]Grupowanie wg daty
Forum PHP.pl > Forum > Przedszkole
miccom
Witam serdecznie.
Chciałbym zrobić coś takiego, aby w moim forum wyświetlały się tematy wg ostatniego dodanego postu.

Moje zapytanie wyświetlające tematy jest następujące:
  1. <?php
  2. $host="localhost"; // Host
  3. $username="no_ja"; // użytkownik
  4. $password="moje_haslo"; // hasło do mysql
  5. $db_name="naza_bazy_danych"; // nazwa bd
  6. $tbl_name="tabela_forum"; // nazwa tabeli
  7.  
  8. // Connect to server and select databse.
  9. mysql_connect("$host", "$username", "$password")or die("cannot connect");
  10. mysql_select_db("$db_name")or die("cannot select DB");
  11.  
  12. $sql="SELECT * FROM $tbl_name ORDER BY id ASC";
  13.  
  14. $result=mysql_query($sql);
  15. ?>
  16. <table width="800" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
  17. <tr>
  18. <td width="54%" align="center" bgcolor="#E6E6E6"><strong>Temat</strong></td>
  19. <td width="10%" align="center" bgcolor="#E6E6E6"><strong>Wyświetleń</strong></td>
  20. <td width="10%" align="center" bgcolor="#E6E6E6"><strong>Odpowiedzi</strong></td>
  21. <td width="13%" align="center" bgcolor="#E6E6E6"><strong>Autor</strong></td>
  22. <td width="13%" align="center" bgcolor="#E6E6E6"><strong>Ostatni post</strong></td>
  23. </tr>
  24.  
  25. <?php
  26. while($rows=mysql_fetch_array($result)){ // Start pętli
  27. ?>
  28. <tr>
  29. <td bgcolor="#FFFFFF"><a href="pokaz_temat.php?id=<? echo $rows['id']; ?>"><body link='black' vlink='#2E6700' alink='#2E6700'><? echo $rows['topic']; ?></a><BR></td>
  30. <td align="center" bgcolor="#FFFFFF"><font size='2'><? echo $rows['view']; ?></font></td>
  31. <td align="center" bgcolor="#FFFFFF"><font size='2'><? echo $rows['reply']; ?></font></td>
  32. <td align="center" bgcolor="#FFFFFF"><font size='2'><? echo $rows['name']; ?></font></td>
  33. <td align="center" bgcolor="#FFFFFF"><font size='2'><? echo $rows['last']; ?></font></td>
  34. </tr>
  35.  
  36. <?php
  37. // zamykam pętle i połączenie z mysql
  38. }
  39. ?>

I teraz wyświetla mi tematy postów, autorów, ilość wyświetleń i autora ostatnio dodanego postu. Segreguje tematy wg id.
Wiem że mam zmienić ten kawałek kodu:
  1. $sql="SELECT * FROM $tbl_name ORDER BY id ASC";
i zamiast ORDER BY id (numer tematu!) zrobic ORDER BY `kiedy`( gdzie `kiedy` to datetime w formacie $datetime=date("d-m-y H:i:s"); ). Ale jeśli zamienię `id` na `kiedy` to nie działa. Jak grupować wg daty?
Proszę o pomoc. Pozdrawiam. miccom
piotrooo89
ale co nie działa nic nie wyświetla jakiś błąd? a tak poza tym żeby od ostatniego rekordu sortowało używa się DESC a nie ASC
miccom
Cytat(piotrooo89 @ 9.07.2008, 09:21:54 ) *
ale co nie działa nic nie wyświetla jakiś błąd? a tak poza tym żeby od ostatniego rekordu sortowało używa się DESC a nie ASC

NO tak, ale w kodzie grupuję wg. id( a ten ma być najmniejszy)

No nie wyświetla mi błędu. Wyświetla wszystko, ale nie segreguje...
nevt
pokaż strukturę tabeli - nie znamy pól nie znamy typów - mamy zgadywać ?
miccom
Przepraszam. Zapomniałem.

Struktura tabeli pytań:
  1. CREATE TABLE `forum_question` (
  2. `id` int(4) NOT NULL AUTO_INCREMENT,
  3. `topic` varchar(255) character SET latin2 NOT NULL DEFAULT '',
  4. `detail` longtext character SET latin2 NOT NULL,
  5. `name` varchar(65) character SET latin2 NOT NULL DEFAULT '',
  6. `email` varchar(65) character SET latin2 NOT NULL DEFAULT '',
  7. `datetime` datetime NOT NULL DEFAULT '',
  8. `view` int(4) NOT NULL DEFAULT '0',
  9. `reply` int(4) NOT NULL DEFAULT '0',
  10. `last` varchar(100) collate utf8_unicode_ci NOT NULL,
  11. `kiedy` datetime NOT NULL,
  12. PRIMARY KEY (`id`)
  13. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=9 ;
nevt
  1. SELECT * FROM `forum_question` ORDER BY `kiedy` DESC;

musi działać na poprawnie na 100%

chyba, że pole `kiedy` nie jest wypełnione lub zawiera błędne wpisy
wyświetl je sobie w tej tabelce w HTML, że by sprawdzić.

ale zastanawia mnie inna sprawa, pokazałeś definicję tabeli `forum_question`, a w twoim kodzie stoi jak wół:
  1. <?php
  2. $tbl_name="tabela_forum"; // nazwa tabeli
  3. ?>

może po prostu ciągniesz dane nie z tej tabeli co trzeba ?
miccom
Cytat(nevt @ 9.07.2008, 10:26:09 ) *
  1. SELECT * FROM `forum_question` ORDER BY `kiedy` DESC;

musi działać na poprawnie na 100%

chyba, że pole `kiedy` nie jest wypełnione lub zawiera błędne wpisy
wyświetl je sobie w tej tabelce w HTML, że by sprawdzić.

ale zastanawia mnie inna sprawa, pokazałeś definicję tabeli `forum_question`, a w twoim kodzie stoi jak wół:
  1. <?php
  2. $tbl_name="tabela_forum"; // nazwa tabeli
  3. ?>

może po prostu ciągniesz dane nie z tej tabeli co trzeba ?

nie nie. jest ok. Dane ciągnę z tabeli forum_question. Dziękuję za przejrzenie się mojego posta.
Ja zrobiłem błąd bleee
Zapis do bazy był jako datetime. ALe format daty miałem
  1. <?php
  2. $datetime=date("d-m-y H:i:s");
  3. ?>
, a datetime w bazie powinno być jako
  1. <?php
  2. $datetime=date("Y-m-d H:i:s");
  3. ?>
Zmieniłem format daty i działa.

Stąd ten kłopot. Dziękuję Wam.




P.S.
w php korzystasz z funkcji date(), w nawiasie wpisujesz co cię interesuje:

a - "am" lub "pm"

A - "AM" lub "PM"

B - Czas internetowy Swatcha

d - dzień miesiąca, 2 cyfry z zerem na początku; tzn. od "01" do "31"

D - dzień tygodnia, tekst, 3 litery; n.p. "Fri"

F - miesiąc, tekst, pełna nazwa; n.p. "January"

g - godzina, format 12-godzinny bez zera na początku; tzn. od "1" do "12"

G - godzina, format 24-godzinny bez zera na początku; tzn. od "0" do "23"

h - godzina, format 12-godzinny z zerem na początku; tzn. od "01" do "12"

H - godzina, format 24-godzinny z zerem na początku; tzn. od "00" do "23"

i - minuty; tzn. od "00" do "59"

I (duża litera i) - "1" jeśli czas oszczędzania światła słonecznego (w Polsce - czas letni), "0" jeśli czas standardowy (w Polsce - zimowy)

j - dzień miesiąca bez zera na początku; tzn. od "1" do "31"

l (mała litera 'L') - dzień tygodnia, tekst, pełna nazwa; n.p. "Friday"

L - "1" jeśli rok przestępny, "0" w przeciwnym razie

m - miesiąc; tzn. "01" to "12"

M - miesiąc, tekst, 3 litery; n.p. "Jan"

n - miesiąc bez zera na początku; tzn. "1" to "12"

O - różnica w stosunku do czasu Greenwich; n.p. "+0200"

r - data sformatowana według RFC 822; n.p. "Thu, 21 Dec 2000 16:01:07 +0200" (dodane w PHP 4.0.4)

s - sekundy; i.e. "00" to "59"

S - standardowy angielski sufiks liczebnika porządkowego, 2 litery; tzn. "st", "nd", "rd" lub "th"

t - liczba dni w danym miesiącu; tzn. od "28" do "31"

T - strefa czasowa ustawiona na tej maszynie; n.p. "EST" lub "MDT"

U - liczba sekund od uniksowej Epoki (1 stycznia 1970 00:00:00 GMT)

w - dzień tygodnia, liczbowy, tzn. od "0" (Niedziela) do "6" (Sobota)

W - numer tygodnia w roku według ISO-8601, tydzień zaczyna się w poniedziałek (dodane w PHP 4.1.0)

Y - rok, 4 liczby; n.p. "1999"

y - rok, 2 liczby; n.p. "99"

z - dzień roku; tzn. od "0" do "365"

Z - ofset strefy czasowej w sekundach (tzn. pomiędzy "-43200" a "43200"). Ofset dla stref czasowych na zachód od UTC (południka zero) jest zawsze ujemny a dla tych na wschód od UTC jest zawsze dodatni.
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.