Ik zit met een probleem.
Ik ben bezig aan een archief, heb een tabel met allerlei artikelen.
Het enige belangrijke voor jullie zijn denk ik de velden date (datetime) en id (int).

Mijn probleem: ik wil een archief maken van artikelen, met op de homepage aan de zijkant een balk met de maanden waarin artikelen zijn gepost, kun je op klikken met vervolgens een lijstje van de artikelen, je kent het wel.
Nu is mijn vraag: hoe kan ik in een query kijken in welke maanden gepost is, en dus welke ik moet weergeven. Ik heb al wat geprobeerd, maar dat werkte niet: in maart zijn er 15 artikelen gepost, dus krijg ik in mijn archief 15x "March '08", met deze query:
mysql_query("SELECT id, date_format(date, '%M \'%y') as datum FROM article ORDER BY date DESC".

Dat klopt dus niet, maar ik zou niet weten hoe het wel moet. Iemand een idee?
Allereerst is 'date' geen geldige kolomnaam, het is namelijk een gereserveerd woord. Maak hier dus bijvoorbeeld 'datum' van om niet in de problemen te komen...

Om items uit een bepaalde maand te selecteren kun je de MySQL functie MONTH() gebruiken:

SELECT
	*
FROM
	article
WHERE
	MONTH(datum) = 1

Deze query zou alle artikelen uit januari selecteren. Deze query houdt nog geen rekening met het jaar maar met de functie YEAR() zou je daar natuurlijk ook een restrictie op kunnen leggen.

Alle artikelen uit de huidige maand:

SELECT
	*
FROM
	article
WHERE
	MONTH(datum) = MONTH(NOW())
AND
	YEAR(datum) = YEAR(NOW())

Ok, allereerst bedankt voor de kolomnaam, is veranderd, maar met jouw script neemt hij alleen de maand NOW(), en het jaar, maar ik wil het volgende:
je hebt bijv. 5 items:

ID: Datum:
1 2008-02-20 19:51:02
2 2008-02-20 19:50:52
3 2008-03-02 14:34:26
4 2008-03-05 14:28:15
5 2008-03-09 08:52:38

Met jouw script zou hij dan (volgensmij) nu (ID) 1 en 2 teruggeven, maar ik wil dus (ID) 1, en 3 terug (bij wijze van spreken, ik wil natuurlijk de maand en het jaar terug waarin gepost is, dus niet persé die items)

Snap je?
Aha, duidelijk. Zoiets dan:

SELECT
	DISTINCT(MONTH(datum)) AS maand
FROM
	article

Of direct geformatteerd:

SELECT
	DISTINCT(DATE_FORMAT(datum, '%M %Y')) AS maand
FROM
	article

ps. De tweede is beter, aangezien het jaar daar ook in de DISTINCT verwerkt zit. Op die manier wordt daar ook onderscheid op gemaakt...
Haa bedankt!
Ik ga het eens proberen!

EDIT: Het werkt niet, om de een of andere rede zit er een fout in:
$que1 = mysql_query("SELECT id, DISTINCT(DATE_FORMAT(datum, '%M %Y')) AS maand FROM article ORDER BY datum DESC");

De fout die ik krijg is:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT(DATE_FORMAT(datum, '%M %Y')) AS maand FROM article GROUP BY datum DESC' at line 1

Maar er lijkt niks mis te zijn met de syntax..
Ik heb het uiteindelijk zo opgelost gekregen:

mysql_query("SELECT DISTINCT date_format(datum, '%M %Y') as maand FROM article ORDER BY datum DESC")

De id zat in de weg denk ik...

Het spijt me SanThe, voor de bump!
@Blanche: date is een geldige naam, het is geen gereserveerd woord. Of het handig is, dat is een tweede, het doet veel denken aan de functie en het datatype date.
Ok, ik dacht dat het wel een gereserveerd (of in ieder geval verboden) woord was. Aangezien je zoals je zegt ook al de functienaam en het datatype 'DATE' hebt.

Reageren