hierarchiser mes données

WRInaute occasionnel
Bonjour,
Je possède une table mysql avec trois champs : id, titre, date. Je désire lister mes données de la façon suivante :
date 1
-article 1
-article 2
-article ...

date 2
-article 1
-article 2
-article ...

etc...
En gors faire la liste des articles par date (la date étant en entete)
Pourriez vous m'indiquer la requete la plus appropriée pour ce type de listing ?
Merci par avance
Hanlin
 
WRInaute accro
Re: hierarchiser mes donées

Bein une bête requête SQL qui va te ramener tous tes enregistrements, triés par date.

Ensuite, en PHP (ou ASP ou JPS, etc.) lorsque tu parcours tes enregistrements, tu vérifie que la date de l'enregistrement en cours de parcours est différente de la précédente (ce qui suppose que tu conserves dans une variable la date de chaque enregistrement après avoir bouclé dessus. Ensuite, dans le cas d'une nouvelle date, libre à toi de faire l'affichage que tu veux. Ce qui ressemblerait sommairement à ça :

Code:
<?php
$olddate = "";
$sql = "SELECT * FROM table ORDER BY date DESC";
$res = mysql_query($sql);
while ($row = mysql_fetch_array($res))
{
      //si la date diffère de la précédente on l'affiche
      if ($olddate != $row['date'])
      {
            echo $row['date']."<br />";
      }
     //dans tous les cas on affiche le titre de l'enregistrement en cours
      echo $row['titre']."<br />";

      $olddate = $row['date'];
}
 
WRInaute occasionnel
Merci beaucoup, je vais essayer cela....question bebete (je ne suis pas expert) : Ne pense tu pas qu'il faudrait que je prenne en compte que le jour de publication pour que cela marche ? Car la date enregistrée est differente à chaque fois (minutes, secondes etc...)
merci
hanlin
 
WRInaute accro
Ah bah oui c'est sûr, parce que avec l'exemple que je te donne, tu auras donc une ligne d'affichage de date pour chacun des titres. Jette un oeil à la fonction DATE_FORMAT() de Mysql, tu devrais y trouver ton bonheur.
 
WRInaute occasionnel
Code:
$olddate = "";
    $sql = "SELECT title, DATE_FORMAT('created', '%W %M %Y') as date FROM matable ORDER BY created  DESC limit 0,30";
    $res = mysql_query($sql);
    while ($row = mysql_fetch_array($res))
    {
	  $mydate= $row['date']; 
          //si la date diffère de la précédente on l'affiche
          if ($olddate != $mydate)
          {
                echo $mydate."<br />";
          }
         //dans tous les cas on affiche le titre de l'enregistrement en cours
          echo $row['title']."<br />";

          $olddate = $mydate;
    }

mysql_close();
Ya un truc qui doit clocher car la date ne s'affiche plus... :?
 
WRInaute occasionnel
Avec cela ça marche :
Code:
$olddate = "";
    $sql = "SELECT title, UNIX_TIMESTAMP(created)  as unixdate  FROM matable ORDER BY created  DESC limit 0,30";
    $res = mysql_query($sql);
    while ($row = mysql_fetch_array($res))
    {
	  $mydate= date("d-m",$row['unixdate']); 
	 
          //si la date diffère de la précédente on l'affiche
          if ($olddate != $mydate)
          {
                echo $mydate."<br />";
          }
         //dans tous les cas on affiche le titre de l'enregistrement en cours
          echo $row['title']."<br />";

          $olddate = $mydate;
    }
Merci beaucoup UsagiYojimbo !
:D
 
Discussions similaires
Haut