iiifff Posté 6 Décembre 2004 Posté 6 Décembre 2004 Bonjour, Est-ce que quelqu'un saurait comùment on peut regrouper des résultats de requêtes. J'ai ce code: $sql = "SELECT * FROM actus order by date_act_pu DESC"; $req = mysql_query($sql) or die('Erreur SQL ! '.$sql.' '.mysql_error()); while($data = mysql_fetch_array($req)) { $date=$data['date_act_pu']; list($a,$m,$j)=explode("-",$date); $annee = $a; $mois = $m; $jour = $j; echo "<table width=\"100%\" border=\"0\"> <tr> <td><a href='pop.php?date=$annee'>".$annee."</a></td> </tr> <tr> <td><a href='pop.php?date=$annee$mois'>- ".$mois."</a></td> </tr> </table>"; } sur la page "pop.php" j'ai des requetes pour remonter les champs correspondant aux années, ou mois et année. Dans l'état le code renvoie autant de "2004" qu'il y a d'actus saisies en 2004, alors que l'affichage idéal serait: 2004 - janvier -février -etc... 2005 -janvier -février -etc... MERCI BEAUCOUP
Anonymus Posté 6 Décembre 2004 Posté 6 Décembre 2004 Bonjour, il faudrait savoir comment est formatée ta table : date_act_pu
iiifff Posté 6 Décembre 2004 Auteur Posté 6 Décembre 2004 La table est: actus il y a un champ: date_act_pu: qui est la date de saisie au format annee-mois-jour ensuite j'ai différent champs: id, titre_actu, text_actu, lien_actu, c'est tout...
genmin Posté 6 Décembre 2004 Posté 6 Décembre 2004 je sais pas si j'ai tout compris mais un GROUP BY ne pourrai t'il pas faire l'affaire
MarvinLeRouge Posté 6 Décembre 2004 Posté 6 Décembre 2004 Salut, 1) Il ne te faut que les dates donc ne récupère que les dates (date_act_pu et pas *) 2) - Soit tu prends tous les couples année/mois dans la base et tu fais le tri dans ton php - soit tu prends uniquement les années en base et tu récupères les mois pour chaque année (donc 1 requète pour les années + 1 par année pour les mois) - soit tu fais un chti calculun peu couteux en ressources lors de ta requête mais là t'as juste ce qu'il te faut grâce à qqch du genre select year(date_act_pu) as annee, month(date_act_pu) as moisfrom tablegroup by annee, moisorder by annee desc, mois desc et tu te fais juste un petit tableau avec les noms des mois pour que ce soit tout beau. NB : Je ne garantis pas la syntaxe sql exacte : c'est du pas testé. Faire attention aux paramètres sql de format de date pour l'ordre d'interprétation yyyy-mm-dd ou yyyy-dd-mm ou autre. Voili voilou
iiifff Posté 7 Décembre 2004 Auteur Posté 7 Décembre 2004 TROP FORT.......... Là je suis vraiment sur la bonne voie... J'ai maintenant ceci: $sql = "select year(date_act_pu) as annee, month(date_act_pu) as mois from actus group by annee, moisorder by annee desc, mois desc";$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error()); while($data = mysql_fetch_array($req)) {$date1=$data['annee']; echo "<table width=\"100%\" border=\"0\"> <tr> <td><a href='pop.php?date1=$date1'>".$date1."</a></td> <td> </td> </tr>";while($data = mysql_fetch_array($req)) {$date2=$data['mois']; echo "<tr> <td> </td> <td><a href='pop.php?date2=$date1$date2'>- ".$date2."</a></td> </tr>"; } echo "</table>";} Ce qui m'affiche bien: 2004 - 10 - 09 Y a qu'un truc bizarre, il ne remonte pas le premier mois, il commence au deuxième mois , comme s'il prenait la première valeur "annee" comme celle du premier mois... mais déjà je suis beaucoup beaucoup plus avancée qu'hier. MERCI BEAUCOUP
Anonymus Posté 7 Décembre 2004 Posté 7 Décembre 2004 Tu ne peux aligner 2 mysql_fetch_array comme ceci. De plus, tu as de toute facon accès aux $data['annee'] et $data['mois'] avec le même mysql_fetch_array. Ton code donnerait plutot quelque chose comme : $sql = "select year(date_act_pu) as annee, month(date_act_pu) as mois from actus group by annee, moisorder by annee desc, mois desc";$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error()); while($data = mysql_fetch_array($req)) { $date1=$data['annee']; echo "<table width=\"100%\" border=\"0\"> <tr> <td><a href='pop.php?date1=$date1'>".$date1."</a></td> <td> </td> </tr>"; $date2=$data['mois']; echo "<tr> <td> </td> <td><a href='pop.php?date2=$date1$date2'>- ".$date2."</a></td> </tr>"; echo "</table>"; }
iiifff Posté 7 Décembre 2004 Auteur Posté 7 Décembre 2004 (modifié) CA Y EST... ça fonctionne super, il affiche les années puis les mois, tout est bien ordonné et regroupé, c'est génial. Je vous donne le bon code, en tout cas celui qui marche très bien pour moi: $sql = "select year(date_act_pu) as annee from actus group by anneeorder by annee desc";$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error()); while($data = mysql_fetch_array($req)) {$date1=$data['annee']; echo "<table width=\"100%\" border=\"0\"> <tr> <td width=\"15%\"><a href='pop.php?date1=$date1'>".$date1."</a></td> <td> </td> </tr>";$sql2 = "select month(date_act_pu) as mois from actus where year(date_act_pu)=$date1 group by moisorder by mois desc";$req2 = mysql_query($sql2) or die('Erreur SQL !'.$sql2.''.mysql_error()); while($data = mysql_fetch_array($req2)) {$date2=$data['mois']; echo "<tr> <td width=\"15%\"> </td> <td><a href='pop.php?date2=$date1$date2'>- ".$date2."</a></td> </tr>"; } echo "</table>"; } Si ça peut servir à quelqu'un... MERCI BEAUCOUP Modifié 7 Décembre 2004 par Dan
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant