Aller au contenu

Regrouper news par date


Sujets conseillés

Posté

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

Posté (modifié)

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

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

Posté

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.

Posté

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

Posté (modifié)

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
Posté (modifié)

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

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

Posté

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

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

Posté

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

Posté

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.

Posté

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

Posté

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

Posté (modifié)

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

Je t'ai donné le principe à toi maintenant de manipuler les dates, fais une petite recherche, tu trouveras :)

Veuillez vous connecter pour commenter

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



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