Aller au contenu

Regroupement de résultats de requête


iiifff

Sujets conseillés

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 mois
from table
group by annee, mois
order 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

Lien vers le commentaire
Partager sur d’autres sites

TROP FORT.......... :D

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, mois
order 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

Lien vers le commentaire
Partager sur d’autres sites

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, mois
order 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>";
}

Lien vers le commentaire
Partager sur d’autres sites

:D

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 annee
order 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 mois
order 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é par Dan
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...