Floriannn
mercredi 5 octobre 2005 à 19:46
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
mercredi 5 octobre 2005 à 22:40
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
jeudi 6 octobre 2005 à 06:25
Pas trop compris
NorSeb
jeudi 6 octobre 2005 à 08:00
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
dimanche 9 octobre 2005 à 16:12
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
dimanche 9 octobre 2005 à 16:42
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
dimanche 9 octobre 2005 à 16:54
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

Edit car y'a plus simple, voila c'est mieux
Floriannn
mercredi 12 octobre 2005 à 13:13
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
mercredi 12 octobre 2005 à 13:15
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
mercredi 12 octobre 2005 à 13:26
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
mercredi 12 octobre 2005 à 13:33
Portekoi
mercredi 12 octobre 2005 à 13:38
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

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
mercredi 12 octobre 2005 à 13:43
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
Floriannn
mercredi 12 octobre 2005 à 13:53
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
mercredi 12 octobre 2005 à 13:53
Autant pour moi, j'avais mal compris
Floriannn
mercredi 12 octobre 2005 à 13:55
CITATION(portekoi @ mercredi 12 octobre 2005, 13h53)
Autant pour moi, j'avais mal compris

Merci quand même.
smile
mercredi 12 octobre 2005 à 14:18
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
mercredi 12 octobre 2005 à 14:44
Cette fonCtion ne focntionne pas.
Elle ne selectionne pas 7 jours et en plus, les jours qu'elle selectionne sont dans le désordre
smile
mercredi 12 octobre 2005 à 14:48
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
mercredi 12 octobre 2005 à 15:01
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
mercredi 12 octobre 2005 à 15:17
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
mercredi 12 octobre 2005 à 15:33
Je t'ai donné le principe à toi maintenant de manipuler les dates, fais une petite recherche, tu trouveras
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.