Aller au contenu

Regrouper news par date


Floriannn

Sujets conseillés

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.

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 />";
}

Lien vers le commentaire
Partager sur d’autres sites

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.

Modifié par hcplayer
Lien vers le commentaire
Partager sur d’autres sites

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 ??

Lien vers le commentaire
Partager sur d’autres sites

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 ...

Lien vers le commentaire
Partager sur d’autres sites

ou alors tu fais ceci comme il est dit plus haut :

$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 :)

Edit car y'a plus simple, voila c'est mieux :hourra:

Modifié par smile
Lien vers le commentaire
Partager sur d’autres sites

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 ?

Modifié par Floriannn
Lien vers le commentaire
Partager sur d’autres sites

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) :)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 :)

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

Lien vers le commentaire
Partager sur d’autres sites

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 :)

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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é.

Lien vers le commentaire
Partager sur d’autres sites

Fonction date-7 :

$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 ?

Modifié par smile
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...