Archief - Nieuws systeem weergeven per datum

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

fulcoboy

Legacy Member
Ik heb een nieuws systeempje gemaakt maar nu zou ik de onderwerpen willen weergeven per datum. Hieronder voorbeeldje

13/02/2009
nieuwslijn 1
nieuwslijn 2

12/02/2009
nieuwslijn 1
nieuwslijn 2
nieuwslijn 3

11/02/2009
nieuwslijn 1

Dus wil het zo weergeven maar ook met na elke blok van een datum een spatie. Een "oplossing" zou kunnen zijn om voor elke datum een aparte tabel te gaan make in MYSQL maar dat vind ik zo omslachtig... Momenteel is elke nieuwslijn voorzien van een datum in MYSQL. Ben zeker dat iemand mij hier mee kan helpen :)

Als voorbeeld: F1-Club: Index maakt gebruik van dit systeem.

:help:

RpR

Legacy Member
Doe gewoon een sort op datum en dan per lijn kijkt ge of de datum van dit item overeenstemt met de vorige datum zo niet breek je de lijn.

Yngwie

Legacy Member
-ge haalt al de nieuwsberichten op die je wil laten zien. met ORDER BY datum DESC in u sql statement zorgt ge ervoor dat ze van nieuwste naar oudste gerangschikt staan.

-Ge print de datum van u eerste nieuwsbericht af, gevolgd door de titel van het eerste nieuwsbericht.

-vervolgens controleer je voor elk volgend nieuwsbericht of de datum gelijk is aan die dat je net afgeprint hebt, zoja? print de titel van dat nieuwsbericht. zoniet? print de datum van dat nieuwsbericht en vervolgens de titel.

passero

Legacy Member
Een iets omslachtere manier maar toch wel goed volgens mij

select distinct datum from nieuwsberichten order by datum desc

voor elke rij in die resultset:
select * from nieuwsberichten where datum = ' . $row['datum'] ;
een nieuw lus die dan de titel van elk bericht print
na het einde van die lus kan je dan een lege lijn printen en naar het volgende record gaan.

Of die manier moet je niet telksen de datum vergelijken met de voorgaande. Het is misschien ietsje minder performant maar wel schoner geschreven :D

WHiSPy

Legacy Member
passero zei:
Een iets omslachtere manier maar toch wel goed volgens mij

select distinct datum from nieuwsberichten order by datum desc

voor elke rij in die resultset:
select * from nieuwsberichten where datum = ' . $row['datum'] ;
een nieuw lus die dan de titel van elk bericht print
na het einde van die lus kan je dan een lege lijn printen en naar het volgende record gaan.

Of die manier moet je niet telksen de datum vergelijken met de voorgaande. Het is misschien ietsje minder performant maar wel schoner geschreven :D

Als oracle programmeur had ik tenminste toch al verwacht dat je 't N+1 probleem kende.

Simpelste oplossing: alle records geordend ophalen en dan tijdens je lus kijken of de datum gelijk is aan diegene waar je de data voor aan 't tonen bent.

passero

Legacy Member
tja we hebben der nie zoveel last met veel query's. Als uw DB op een rac staat met load balancing en een agressieve index adhv statistieken worden gemaakt dan steekt het nie op een query meer of minder :)

Maar je hebt daar wel een punt in.

fulcoboy

Legacy Member
Jullie moeten toch nog is helpen ze want op de moment vind ik het niet :)

Hier is mijn code:
PHP:
<?php
$query = mysql_query("SELECT *, DATE_FORMAT(DATE, '%H:%i') AS TIME, DATE_FORMAT(DATE, '%d %M') AS NIEUWSDATUM FROM news ORDER BY DATE DESC ");

while($row = mysql_fetch_array($query)) {
echo"
<div class='nieuwslink'>$row[NIEUWSDATUM]</div>
<a href='verslag.php?id=$row[ID]' class='nieuwslink'>$row[TIME] - $row[TITLE]</a><br />
";

}
?>

Dit is de output:

Code:
14 February
18:50 - Ferrari kiest opnieuw voor lollipop
14 February
00:41 - Dit is een test
14 February
00:23 - Vettel is bezorgd
13 February
18:09 - Geen Canadese GP in 2009

Iemand dus enig idee hoe ik die van 14 feb. kan groeperen en daarna een spatie ertussen zet, enz... ?

Wat ik in dit geval zou moeten bekomen is het volgende:

Code:
14 February
18:50 - Ferrari kiest opnieuw voor lollipop
00:41 - Dit is een test
00:23 - Vettel is bezorgd

13 February
18:09 - Geen Canadese GP in 2009

passero

Legacy Member
PHP:
<?php 
$query = mysql_query("SELECT *, DATE_FORMAT(DATE, '%H:%i') AS TIME, DATE_FORMAT(DATE, '%d %M') AS NIEUWSDATUM FROM news ORDER BY DATE DESC "); 

$prevDate = "";

while($row = mysql_fetch_array($query)) { 
if($prevDate != $row[NIEUWSDATUM])
{
echo" 
<div class='nieuwslink'>$row[NIEUWSDATUM]</div>";
$prevDate = $row[NIEUWSDATUM];
} 
echo "<a href='verslag.php?id=$row[ID]' class='nieuwslink'>$row[TIME] - $row[TITLE]</a><br /> 
"; 

} 
?>

Zo iets dus.
Je moest nog controleren wanneer de datum verschillend is van de huidige om hem zo te outuputten want nu ga je die elke keer op het scherm afdrukken

fulcoboy

Legacy Member
passero zei:
PHP:
<?php 
$query = mysql_query("SELECT *, DATE_FORMAT(DATE, '%H:%i') AS TIME, DATE_FORMAT(DATE, '%d %M') AS NIEUWSDATUM FROM news ORDER BY DATE DESC "); 

$prevDate = "";

while($row = mysql_fetch_array($query)) { 
if($prevDate != $row[NIEUWSDATUM])
{
echo" 
<div class='nieuwslink'>$row[NIEUWSDATUM]</div>";
$prevDate = $row[NIEUWSDATUM];
} 
echo "<a href='verslag.php?id=$row[ID]' class='nieuwslink'>$row[TIME] - $row[TITLE]</a><br /> 
"; 

} 
?>

Zo iets dus.
Je moest nog controleren wanneer de datum verschillend is van de huidige om hem zo te outuputten want nu ga je die elke keer op het scherm afdrukken

Tnx dude, het werkt :niceone:

fulcoboy

Legacy Member
Mss nog 1 vraagje, als ik nu na elke blok text de text nog zou willen breken waar zou ik dan de <br /> zetten?

dus bv:
date1
blablabla
blablabla
>>>>>>>> waar moet ik deze spatie nog invullen in mijn code?
date2
blablabla

Cycloon

Legacy Member
passero zei:
tja we hebben der nie zoveel last met veel query's. Als uw DB op een rac staat met load balancing en een agressieve index adhv statistieken worden gemaakt dan steekt het nie op een query meer of minder :)

Maar je hebt daar wel een punt in.

Alsof dat een reden mag zijn om een databank zo hard te misbruiken.

Dit probleem kan zelf perfect opgelost worden met 1 query zonder ook maar extra php verwerking te gebruiken (buiten het uitprinten natuurlijk).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan