Automatisch Archief (PHP / MySQL)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Roy Nieterau

Roy Nieterau

03/06/2010 21:12:29
Quote Anchor link
Hey,

Ik heb iets heel simpels maar ik kom er niet helemaal uit, het lukt me nog niet helemaal in PHP om met data (als in tijdsaanduidingen) te werken en dit ook 'succesvol' toe te passen.

Wat ik nu wil bereiken is dat ik tussen twee tijden alle maanden (met jaartal wil weergeven) als:
- January 2010
- February 2010
- March 2010

De ene tijd is een 'date' in m'n MySQL en de andere de tijd van 'nu'.

Hoop dat iemand me het kan uitleggen, want ik kom er niet uit!
 
PHP hulp

PHP hulp

05/11/2024 15:43:29
 
Luc a

luc a

03/06/2010 21:34:11
Quote Anchor link
kun je het misschien iets beter uitleggen?
 
- SanThe -

- SanThe -

03/06/2010 21:51:48
Quote Anchor link
Zoiets?

SELECT ... FROM ... WHERE datum BETWEEN '...inputdatum...' AND NOW()
 
Roy Nieterau

Roy Nieterau

03/06/2010 21:52:29
Quote Anchor link
Ik heb nu dit gedaan, en dat werkt enigzins.. maar lijkt me niet optimaal.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function showArchives () {

$sql = "SELECT date, DATE_FORMAT(date, '%m') as month, DATE_FORMAT(date, '%Y') as year FROM article ORDER BY date ASC LIMIT 1"; // returns oldest article
$res = mysql_query($sql);
    if (mysql_num_rows($res) >= 1) {
        while ($row = mysql_fetch_array($res)) {
        $checkmonth = $row['month'];
        $checkyear = $row['year'];
        }
    }
    $nowmonth = date("n");
    $nowyear = date("Y");
    echo $checkmonth."-".$checkyear."<br>";
    while (($nowmonth > $checkmonth & $nowyear == $checkyear) || $nowyear > $checkyear)
    {
        echo $nowmonth."-".$nowyear."<br>";
        if ($nowmonth == 0) { $nowmonth = 12; $nowyear -= 1;}
        $nowmonth--;
    }
}


Zo haal ik bijvoorbeeld uit mijn database de datum
19-december-2009.
Nu wil ik vanaf die datum (tot nu) van iedere maand de maandnaam plus het jaartal uitprinten.

Dus:
December 2009, Januari 2010, Februari 2010, Maart 2010, enz. tot NU.


Eigenlijk wil ik vanaf mijn allereerste artikel uit de SQL database tot nu van iedere maand (waarin een artikel gescheven is) een linkje. Als in een archief lijstje van de artikels.

Iemand een idee? :)
Gewijzigd op 03/06/2010 23:29:12 door Roy Nieterau
 
Terence Hersbach

Terence Hersbach

04/06/2010 07:31:52
Quote Anchor link
- let op dat je in de laatste while '&' doet ipv '&&'. Nu ben je bezig met bitwise dingetjes, denk niet dat dat de bedoeling is..

- DATE_FORMAT(date, '%m') is hetzelfde als MONTH(date)
- DATE_FORMAT(date, '%Y') is hetzelfde als YEAR(date)

Als je alleen de maanden wilt hebben waar een artikel in geschreven is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT COUNT(`date`) AS articles, MONTH( `date` ) , YEAR( `date` )
FROM `article`
GROUP BY MONTH( `date` ) , YEAR( `date` )
ORDER BY `date`

- gebruik ipv de naam date liever een andere naam voor dit veld, ivm gereserveerde woorden binnen SQL. daarbij zegt de naam date niet veel, behalve dat t een datum is. Je hebt er meer aan als je weet waar die datum voor staat, dus bijvoorbeeld date_posted
Gewijzigd op 04/06/2010 07:32:52 door Terence Hersbach
 
Roy Nieterau

Roy Nieterau

04/06/2010 08:45:32
Quote Anchor link
Aaaa! Zo makkelijk.

Bedankt!
Dit is wat ik ervan gemaakt heb:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
$sql = "SELECT COUNT(`date`) AS articles, DATE_FORMAT(date, '%M %Y') as archiveDate FROM article GROUP BY MONTH( `date` ) , YEAR( `date` ) ORDER BY date ASC";
$res = mysql_query($sql);
    if (mysql_num_rows($res) >= 1) {
        while ($row = mysql_fetch_array($res)) {
        echo $row['archiveDate']."<br>";
        }
    }


Nog wel een vraagje, waarom select je count('date') uit de SQL? - is dat echt nodig?
En kan ik gemakkelijk de huidige maand (en de toekomst) overslaan in m'n SQL query?
Gewijzigd op 04/06/2010 08:49:12 door Roy Nieterau
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.