Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Uutisarkisto

Tinqe [29.07.2006 18:47:37]

#

Miten mahtaisi olla järkevintä toteuttaa blog/uutis-systeemiin arkistointi. Haluaisin kuukausittain viestit eri sivuille, eli pitäisi saada eri vuosien eri kuukaudet selville tietokannasta.

Uutiset ovat mySQL:ssä, taulun rakenteena
id|otsikko|viesti|kirjoittaja|aika(unix timestamp)|

Tuosta pitäisi saada lopputulokseksi jotain tyyliin:
2006 Tammikuu
2006 Helmikuu
2006 Maaliskuu
jne.

Antti Laaksonen [29.07.2006 19:05:02]

#

Laske jokaista kuukautta kohden kaksi arvoa: aika aivan kuukauden alussa ja kuukauden lopussa.

Siis esim. tämän vuoden tammikuusta:

alku = 1.1.2006 kello 00:00:00
loppu = 31.1.2006 kello 23:59:59

Tähän sopii hyvin PHP:n mktime-funktio.

Nyt tietokannasta on helppo hakea viestejä tietyn kuukauden sisällä:

SELECT * FROM uutiset WHERE aika >= alku AND aika <= loppu

Metabolix [29.07.2006 19:18:11]

#

Laitat sivun uutiset.php, jolle voi antaa GET-muuttujana aikavälin alun ja lopun, ja käytät MySQL-kyselyssä niitä:

WHERE aika BETWEEN $_GET['alku'] AND $_GET['loppu']

Edit: vai olikos tuo vain DATE-tyypille? Siinä tapauksessa:

WHERE aika >= $_GET['alku'] AND aika <= $_GET['loppu']

Sivulla arkisto.php generoit listan, jossa on sopivat linkit jokaiselle kuukaudelle:

for ($v = $perustusvuosi; $v <= $tama_vuosi; ++$v) {
  for ($kk = 1; $kk <= 12; ++$kk) {
    # echo '<a href="uutiset.php?alku='.mktime(kuun_alku).'&loppu='.mktime(kuun_loppu).'">';
  }
}

Kas, olinpa hidas.

Tinqe [29.07.2006 20:59:13]

#

Itselläni tuli mieleen lisätä tauluun uusi kenttä "arkisto", johon tallennettaisiin haluttu vuosi-kk -yhdistelmä.

arkisto
200601
200602
200603

Tämän jälkeen olisi helppo hakea arkiston tietueiden eri arvot:
SELECT DISTINCT arkisto FROM taulu

Jatkan vielä tuon mktime():n ja kuukauden alun ja lopun kanssa järkeilyä, mutta tuo vaikuttaisi toimivalta oikotieltä.

Olga [29.07.2006 21:55:29]

#

Suotta uutta kenttää moiselle värkkäät, voithan hoitaa tuon ihan aikakenttää muotoilemalla. Eli esim.

SELECT DISTINCT(DATE_FORMAT(FROM_UNIXTIME(aika), '%Y%d')) AS kk
FROM taulu

Koodi vedetty hatusta, joten oletettavasti ei toimi sellaisenaan.

Tinqe [30.07.2006 10:52:50]

#

Kiitokset Olga. En itse tiennyt tuota DATE_FORMAT ja nyt toimii. Tuo sinun koodisi toimi muuten suoraan, mutta tuli muodossa vuosipäivä :)

SELECT DISTINCT ( DATE_FORMAT( FROM_UNIXTIME( aika ) , '%Y%m' ) ) AS kk FROM taulu

Samalla sain tehtyä sivun, joka näyttää tietyn kuukauden uutiset.

SELECT * FROM `taulu` WHERE DATE_FORMAT( FROM_UNIXTIME( aika ) , '%Y%m' ) = '200607'

Olga [30.07.2006 21:47:56]

#

Ah joo, mutta pitäähän sitä nyt ainakin yks typo eksyä joukkoon ku hatusta jottain heittää :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta