Automatisch Archief (PHP / MySQL)
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!
kun je het misschien iets beter uitleggen?
SELECT ... FROM ... WHERE datum BETWEEN '...inputdatum...' AND NOW()
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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--;
}
}
$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
- 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)
1
2
3
4
2
3
4
SELECT COUNT(`date`) AS articles, MONTH( `date` ) , YEAR( `date` )
FROM `article`
GROUP BY MONTH( `date` ) , YEAR( `date` )
ORDER BY `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
Bedankt!
Dit is wat ik ervan gemaakt heb:
Code (php)
1
2
3
4
5
6
7
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>";
}
}
$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