Ik ben bezig met een CMS. De CMS kant is zo goed als af en ik ben nu bezig met de voorkant.
In de CMS kun je instellen dat hij automatisch berichten archiveert. Als je dit hebt aanstaan, kun je ook kiezen na hoeveel dagen de berichten worden gearchiveerd. Je kunt ook instellen hoeveel er minimaal getoond moeten worden.
Ik heb een query als deze:
SELECT
title
, message
, DATE_FORMAT(postdate, '%d.%m.%Y %H:%i') as showdate
FROM
tabel_naam
WHERE
postdate >= NOW()-$arch_na_x_dagen
Nu wil ik dus wel dat hij altijd 10 berichten laat zien, ongeacht of het bericht nu kleiner is dan NOW() - $arch_na_x_dagen of niet.
Ik ben (nog) niet een ster in SQL. Weet iemand misschien hoe dit te maken? :)
Tjah, wat je zou kunnen doen is met 2 query's (ik zie zelf geen oplossing hiervoor met 1 query)
met mysql_num_rows op je 1e query even kijken of er al 10 records zijn (minimaal!) Wanneer het aantal minder is dan 10, het verschil berekenen, en dat aantal records ophalen uit de 2e query.
in de 2e query draai je de WHERE om, dus berichten die wel ouder zijn, gesorteerd op datum (DESC), en dan de limit wel aanzetten, dat je de 1e tot en met degene zodat je wel op je minimale 10 berichten uitkomt.
Misschien iets met een subquery. SELECT * FROM tabel LIMIT 0,10 - aantal_velden_uit andere query
en anders kan je het altijd met php doen.
$nog_optehalen = 10 - mysql_num_rows(mysql_query($sql));
SELECT * FROM tabel LIMIT 0,$nog_optehalen
Het werkt niet zoals ik gehoopt had. Ik heb het even getest. Ik heb één rij in de tabel staan die een id nummer van 16 heeft. Omdat ik wil dat hij ongeacht de WHERE een x aantal berichten laat zien, heb ik de volgende query geprobeerd:
SELECT title, message, DATE_FORMAT( postdate, '%d.%m.%Y %H:%i' ) AS showdate
FROM bk_weblog
WHERE id >16
ORDER BY postdate DESC
LIMIT 10
De WHERE is dus FALSE, maar door LIMIT 10 zou hij toch getoond moeten worden. Deze query geeft echter geen resultaat.
Even logisch nagedacht:
Je haalt vanaf NOW()-10 tien rijen op. met de meest 'verse' bovenaan.
dus zou je de where om moeten draaien
SELECT
title
, message
, DATE_FORMAT(postdate, '%d.%m.%Y %H:%i') as showdate
FROM
tabel_naam
WHERE
postdate <= NOW()-$arch_na_x_dagen
ORDER BY
postdate DESC (of ASC, ik haal ze verdomme altijd door elkaar :( )
LIMIT
10
zou het dan zijn, toch?
o nee, grr... dan haal je geen andere berichten op als er geen archief berichten zijn...