Autor Zpráva
mirio
Profil
Ahoj,

na webu www.hctorpedohavirov.cz/ mám archiv článků. Teď je jich málo a toto vypisování mně nebolí, ale do budoucna bych archiv chtěl vypisovat přehledněji. Napadá mně výpis typu...

Září 2011:

článek 1
článek 2

Srpen 2011:

článek 3
článek 4

atd.
atd.
atd.

..., ale moc nevím, jak na to. V databázi mám samozřejmě datum vytvoření (ve formátu UNIX Timestamp - což byla možná chyba?) a nejsem schopen přijít na to, jak vyhodnocovat a sloučit články za dané období (v mém případě měsíc a rok) a pak období vypsat, umístit pod něj články, vypsat další období, umístit články, atd.

Pomůže někdo, prosím? Nebo vás napadá lepší způsob?

Děkuju mockrát.

P.S. Stránkování určitě nechci.
Bertram
Profil
Ahoj,
a přestavit tabulku k obrazu svému by byl problém?
mirio
Profil
To asi ne, ale já stejně nevím, jak bych to měl udělat, i kdyby tam bylo MySQL-ovské "DATE". :-)
Kcko
Profil
SELECT...
FROM...

GROUP BY YEAR(datum_clanku), MONTH(datum_clanku)
ORDER BY ...



a vypis snad zvládneš ne?
mirio
Profil
Aha, takhle to myslíš, přidat 2 sloupce, to mně vůbec nenapadlo... :-)) Podívám se na to.
Kcko
Profil
Nemusíš, samozřejmě je to vhodnejší už kvůli indexům, ale pokud tam nebudeš mít kvanta záznamů, tak není potřeba.
mirio
Profil
A jak bys to řešil v případě, že bych nic nepřidával? Teda s požitím aktuálního stavu, tedy Timestampu?
Kcko
Profil
mirio:
Timestamp nepoužívám (vždy Datetime nebo Date), aby se s tím dalo pracovat.
Takže bych si napsal převodní skript z Timestampu na DateTime a hodnoty bych si převedl a bylo by.
mirio
Profil
Aha, takže bys prostě převedl UNIX na DATE (není problém) a potom seskupil pomocí GROUP BY. OK, dík moc za nasměrování, zkusím se na to podívat a pak sem dám nějaký závěr. Zatím moc děkuju.
mirio
Profil
Tal jsem se k tomu konečně dostal a hned jsem zase v koncích. :-) Když se snažím použít GROUP BY, vypíše mi to jen jeden řádek, což je blbě.

Dotaz jsem maximálně zjednodušil, abych našel problém a to takto...
SELECT * FROM `clanky` WHERE aktivni=1 GROUP BY YEAR(vytvoreno_date)
...a výsledek je pořád stejný - pouze jeden řádek. Bez GROUP BY vypíše samozřejmě vše. Sloupec "vytvoreno_date" je pak MySQLovský typ "DATE".

Snažil jsem se hledat na http://dev.mysql.com/, ale nenašel jsem nikde, proč mi to pořád vyhazjue jen jeden výsledek.

Nevím, kde je problém...
Tori
Profil
mirio:
Spíš ORDER BY, než seskupování (podle toho, co píšete v #1).
okolojdouci
Profil *
Tori:
Spíš ORDER BY, než seskupování (podle toho, co píšete v #1).

.. a to rozdělení do skupin realizovat v php pomocí date()
mirio
Profil
A můžu se zeptat jak?
okolojdouci
Profil *
V rámci cyklu, kterým vypisuješ jednotlivé položky, porovnávej měsíc aktuální a minulé položky. Když se liší, ten nový vypiš.

$minuly = 0;
..
while {
..
$mesic = date("n", $zaznam["datum"]);
if ($mesic != $minuly) { echo "nový měsíc: ".$mesic };
..
$minuly = $mesic;
}
mirio
Profil
Jo, už mně to došlo, já nechápal to použití date(), protože jsem blbej. :-)

Udělal jsem to takto...
$minuly_mesic = 0;
...
while {
...
$mesic = substr($archiv["vytvoreno"],3,2);
if ($mesic != $minuly_mesic) { 
echo ("<h3 class=\"darkRed\">".$archiv["mesic"]." ".$archiv["rok"]."</h3>");
}
$minuly_mesic = $mesic;
...
}
...snad to není moc velká pitomost.
mirio
Profil
Pro úplnost, použito zde: http://www.hctorpedohavirov.cz/archiv.php

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0