Version complète: sur le forum Webmaster Hub : Regrouper news par date
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Floriannn
Bonjour,
J'ai dans l'envie, pour mon site, de créer un petit script php qui regroupera mes news par date.
Je veux aller les chercher dans ma base de données, puis les regrouper du style:

Le 14/05/2005:
-News 1
-News 2

au lieu de

14/05/2005: News 1
14/05/2005: News 2.

J'ai fais un petit code ci dessous, mais je ne sais pas comment le finaliser pour faire ce que je voudrai faire.

Pouvez-vous m'éclairer ?

Je vous remercie d'avance.

CODE
include("include/configuration.php");

$retour = mysql_query("SELECT * FROM news GROUP BY timestamp2 ORDER BY timestamp2  DESC LIMIT 0,7");

while ($donnees = mysql_fetch_array($retour)){
echo "<b>";

$donnees2[timestamp2] = date('d/m/Y', $donnees[timestamp2]);
echo $donnees2[timestamp2];

echo "</b><br />";

$retour2 = mysql_query("SELECT id, timestamp, titre, timestamp2 FROM news WHERE timestamp2='".$donnees[timestamp2]."' ORDER BY timestamp2 DESC");
while ($donnees2 = mysql_fetch_array($retour2))
{
echo "$donnees2[titre] <br />";
}

echo "<br />";
}
hcplayer
en créant une varible bidon du genre $j hors de la boucle



$j = timestamp2; //timestamp 2 du passage d'avant

et dans la boucle

tu testes si $j = timestamp2 -> affiche juste news
si $j != timestamp2 -> affiche timestamp <br> news

jy reviendrais si j'ai pas été clair, mais je vais au dodo pour ce soir.
Floriannn
Pas trop compris smile.gif
NorSeb
Lorsque tu parcours tes résultats tu stocke la date en cours et tu la compare avec celle de chaque enregistrement... Si elle change, tu l'affiche et tu remplace la date en cours.

Et ainsi de suite...

Personne ne connait de sites d'apprentissage des algorithmes ??
Floriannn
Bonjour,
Désolé, mais peut être que pour vous, en expliquant comme ça, ça parait simple, mais je n'ai toujours pas compris.
Pouvez-vous me donner un exemple s'il vous plait ?

Merci d'avance.
smile
Bon j'au lu rapidement en quelques secondes et je ne vois pas pourquoi tu fais 2 requetes, 1 seule par group by date devrait suffire ...
smile
ou alors tu fais ceci comme il est dit plus haut :

CODE
$retour = mysql_query("SELECT * FROM news ORDER BY timestamp2  DESC LIMIT 0,7");

while ($donnees = mysql_fetch_array($retour)){
$dt=date('d/m/Y', $donnees[timestamp2]);
if ($dt!="$reserve")
  {
   echo "$dt ";
   }
 
echo"<br/> - $donnees[titre] ";
   
 
$reserve="$dt";

}


A verifier mais ca doit fonctionner smile.gif

Edit car y'a plus simple, voila c'est mieux IMSTP3.gif
Floriannn
Bonjour,
Un grand merci smile, ça à l'air de focntionner, mais il y a un mais.
En faite avec le "DESC LIMIT 0,7", je pensais à la limite des 7 dernières dates différentes, donc des 7 derniers jours.
Mais il me prend les 7 dernières dates qu'elles soient les mêmes ou non.
Comment faire pour qu'il me selectionne les 7 dernières dates différentes ?
Portekoi
SELECT DISTINCT chp1, chp2 FROM news ORDER BY timestamp2 DESC LIMIT 0,7

Evite le '*' .

Si tu as la date seule, cela fonctionnera mais si tu as l'heure en plus, il faut que tu fasses un substring (je me souviens plus si ca existe sous mysql) smile.gif
smile
Je crois pas que le distinct va aller, puisqu'il va enlever les news qui ont la meme date.

Sinon pour la date, il faut utliser un where et pas limit
smile
Regarde ici les fonctions mysql avec les dates, sympa non wink.gif

http://dev.mysql.com/doc/mysql/fr/date-and...-functions.html
Portekoi
CITATION(smile @ mercredi 12 octobre 2005, 14h26)
Je crois pas que le distinct va aller, puisqu'il va enlever les news qui ont la meme date.

Sinon pour la date, il faut utliser un where et pas limit
*


Ben justement ' 7 dernières dates différentes', c'est ce qu'il veut smile.gif

Exemple pratique :
id date txt
1 11/10/2005 News1
2 11/10/2005 News2
3 10/10/2005 News3
4 09/10/2005 News4

select distinct date, txt from news ORDER BY date DESC LIMIT 0,7
Sortira News1, News3, News4


Portekoi
smile
Ben pas pigé ca moi, il veut les 7 dernières dates differentes avec toutes les news qui s'y rapportent :

date 1
- news1
- news 2

date 2
-news3
- news 4

jusqu'a date 7, donc le distinct ne marche pas, ou alors j'en perd mon latin smile.gif
Floriannn
Oui, tu as bien compris Smile, mais à partir du moment où je supprime le "LIMIT 0,7" et je mets un "WHERE timestamp2", les news seront toujours bien placées, mais il n'y aura plus aucune limite, même pas en jour.
Portekoi
Autant pour moi, j'avais mal compris smile.gif
Floriannn
CITATION(portekoi @ mercredi 12 octobre 2005, 13h53)
Autant pour moi, j'avais mal compris smile.gif
*

Merci quand même. wink.gif
smile
Utilise une fonction que je t'es fait voir

WHERE TO_DAYS(now())-TO_DAYS(champs_date) < 8

là t'auras les 7 derniers jours
Floriannn
Cette fonCtion ne focntionne pas.
Elle ne selectionne pas 7 jours et en plus, les jours qu'elle selectionne sont dans le désordre sad.gif
smile
c'est parce que ton champs est de type timestamp

ou alors tu fais toi meme ta fonction, date du jour - 7 et cela de type timestamp et fias un order by pour que ca soit classé.
smile
Fonction date-7 :

CODE
$d=time() - (7 * 24 * 60 * 60);

$retour = mysql_query("SELECT * FROM news where timestamp2>='$d' ORDER BY timestamp2 DESC");

while ($donnees = mysql_fetch_array($retour)){
$dt=date('d/m/Y', $donnees[timestamp2]);
if ($dt!="$reserve")
 {
  echo "$dt ";
  }

echo"<br/> - $donnees[titre] ";
   

$reserve="$dt";

}


voilà est ce que ca marche ?
Floriannn
Il ne va me chercher que trois jours, mais si tu peux faire en sorte qu'il aille m'en cherche quatre ça serait bon.

Merci.
smile
Je t'ai donné le principe à toi maintenant de manipuler les dates, fais une petite recherche, tu trouveras smile.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.