[PHP/MySQL]Nieuws per dag sorteren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Metalman
  • Registratie: December 2003
  • Laatst online: 11:01
Ik ben al een tijdje op zoek naar een goede manier om nieuwsberichten op mijn site per dag weer te geven (à la T.Net FP, dus meerdere dagen met een maximum aantal berichten).
Ik ben inmiddels wel zover dat ik de datum correct kan weergeven, maar dat gebeurt nu nog boven élk bericht, en ik wil dus eigenlijk gewoon dit:
Nieuws @ (datum):
-bericht4
-bericht3

Nieuws @ (datum):
-bericht2
-bericht1
etc.

Dit moet mogelijk zijn, maar het lukt me nog niet, wat ik dus krijg met mijn code (zie onder) is dit:
Nieuws @ (datum):
bericht4
Nieuws @ (datum):
bericht3
etc.

Dit is de code die ik nu gebruik (niet de volledige code, maar de relevante stukken alleen):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
//array met Nederlandse maandnamen
$maanden = array(januari, februari, maart, april, mei, juni, juli, augustus, september,
oktober, november, december);
//array met Nederlandse dagnamen
$dagen = array(zondag, maandag, dinsdag, woensdag, donderdag, vrijdag, zaterdag);

$query = "SELECT *
FROM dr_nieuws WHERE active='1'
ORDER BY timestamp DESC, ID DESC LIMIT " . $aantal;
$exec = mysql_query($query) or die("De MySQL Query kon niet uitgevoerd worden <br />Debug info: <br />
Query: $query <br />
MySQL Error: " . mysql_error());

while($data = mysql_fetch_array($exec)) {  //berichten laten zien, titel, posted by, datum, tijd, kort bericht
        $maand1 = date("m", $data['timestamp']);
        $maand2 = $maand1 - 1;
        $Maand = $maanden[$maand2];
        $DagVanDeMaand = date("d", $data['timestamp']);
        $DagVanDeWeek = date("w", $data['timestamp']);
        $Dag = $dagen[$DagVanDeWeek];
        $echo = "Nieuws van " . $Dag . " " . $DagVanDeMaand . " " . $Maand;
        echo "<div class=\"nieuws_datum\">" . $echo . "</div> <br />";
        echo "<div class=\"tbl_row_header\"> (hier het bericht e.d.)</div>";
} 
?>

Ik maak dus gebruik van UNIX timestamps, dat is wel relevant in dit geval denk ik ;) Alvast bedankt voor eventuele reacties.

(mocht deze vraag onverhoopt toch al op GoT staan dan bied ik hierbij mijn excuses aan, ik heb dacht ik goed gezocht, maar ik ben nog niet zo lang hier ;) )

Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Je kunt een test opnemen om te gaan controleren of de twee timestamps gelijk zijn, of deze timestamps zo gaan converteren dat je alleen de dag, maand en jaar terug krijgt.

Zo heb ik het in iedergeval opgelost:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$date2 = '';
$first = TRUE;
while ($result = $db->fetchObject()) {
    $date = date('j F Y', $result->date);
    if ($date2 != $date) {
        if ($first) {
            $content .= '<B>'.$date.'</B><BR>';
            $first = FALSE;
        } else
            $content .= '<BR><B>'.$date.'</B><BR>';
        $date2 = $date;
    }
    $content .= '[img]"dot.gif">[/img]id.'">'.$result->title.'</A><BR>';

[ Voor 57% gewijzigd door Sybr_E-N op 30-01-2004 22:17 ]


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Is een loopje van wat select statements niet handiger? Groeperen voor elke datum en dan voor elke datum een subselect o.i.d. uitvoeren.

Acties:
  • 0 Henk 'm!

Verwijderd

Ten eerste: je array-definitie is niet zo netjes. Beter is:
PHP:
1
$maanden = array('januari', 'februari' ...);


Je probleem fixed:
PHP:
1
2
3
4
5
6
7
8
while($data = mysql_fetch_array($exec)) {  //berichten laten zien, titel, posted by, datum, tijd, kort bericht 
     $date_string = date("dmY", $data['timestamp']);
     if (!isset($old_date) or ($date_string != $old_date)) {
          if (isset($old_date)) echo "<hr>";
          $old_data = $date_string;
     }
/* En hier de rest van je code */
}


BTW. Kijk ook eens naar http://nl.php.net/date.. Daar staat een goede uitleg over wat jij nu een beetje omslachtig doet met die arrays ;)

[ Voor 37% gewijzigd door Verwijderd op 30-01-2004 22:22 ]


Acties:
  • 0 Henk 'm!

  • Metalman
  • Registratie: December 2003
  • Laatst online: 11:01
Aha, bedankt voor jullie uitleg/code. Het ging me ff om het principe, ik kwam er gewoon even niet uit ;) Ik ga even de laatste manier proberen, kijken of het een beetje wil werken :)

[ Voor 6% gewijzigd door Metalman op 30-01-2004 22:21 ]


Acties:
  • 0 Henk 'm!

Verwijderd

T_Metalman_ZF schreef op 30 januari 2004 @ 22:21:
Aha, bedankt voor jullie uitleg/code. Het ging me ff om het principe, ik kwam er gewoon even niet uit ;) Ik ga even de laatste manier proberen, kijken of het een beetje wil werken :)
Ik moet wel zeggen: niet getest ;)

Acties:
  • 0 Henk 'm!

  • Metalman
  • Registratie: December 2003
  • Laatst online: 11:01
Verwijderd schreef op 30 januari 2004 @ 22:24:
[...]
Ik moet wel zeggen: niet getest ;)
Hehe :P Ik neem je code ook niet letterlijk over, het ging me om het idee erachter, de rest verzin ik dan zelf wel ;) Vind ik fijner werken, dan kan ik later evt. bugs ook makkelijker vinden.

Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Ik zou persoonlijk zeggen om te zorgen dat $old_date al gezet is voordat je in dit gedeelte komt. ( al is het zelfs een datum van 1970 :+ )

Nu gaat PHP elke loop controleren of de variabele gezet is. Dat is uiteraard "trager". (al is het maar milliseconden.. )

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

Verwijderd

T_Metalman_ZF schreef op 30 januari 2004 @ 22:29:
[...]

Hehe :P Ik neem je code ook niet letterlijk over, het ging me om het idee erachter, de rest verzin ik dan zelf wel ;) Vind ik fijner werken, dan kan ik later evt. bugs ook makkelijker vinden.
Je gaat je gang maar.. :) Overnemen mag ;)
dusty schreef op 30 januari 2004 @ 22:29:
[...]

Ik zou persoonlijk zeggen om te zorgen dat $old_date al gezet is voordat je in dit gedeelte komt. ( al is het zelfs een datum van 1970 :+ )

Nu gaat PHP elke loop controleren of de variabele gezet is. Dat is uiteraard "trager". (al is het maar milliseconden.. )
Mja, dat kan natuurlijk ook, maar zoals de TS al zei: het gaat om het principe :+

Acties:
  • 0 Henk 'm!

  • Metalman
  • Registratie: December 2003
  • Laatst online: 11:01
Ok bedankt iedereen, het is inmiddels gelukt :D
Linkje kan ik helaas niet geven, site draait alleen lokaal ;)
Pagina: 1