Problème requête select avec double résultats

Problème requête select avec double résultats - SQL/NoSQL - Programmation

Marsh Posté le 28-09-2009 à 15:13:48    

Salut à tous,  
 
Je n'arrive pas à résoudre un problème qui se présente à moi.  
 
Je souhaiterais afficher une liste d'événements dans un ordre chronologique comme ceci :
 

Code :
  1. Octobre 2009
  2. 01 octobre : event n°1
  3. 16 octobre : event n°2
  4. Novembre 2009
  5. 14 novembre : event n°3


Mais je n'arrive à obtenir qu'un résultat comme ça.
 

Code :
  1. Octobre 2009
  2. 01 octobre : event n°1
  3. Octobre 2009
  4. 16 octobre : event n°2
  5. Novembre 2009
  6. 14 novembre : event n°3


Mes tables :  
 
t_agenda : id, jour, mois, annee, titre, contenu
t_mois : id_mois , mois_mois
 
liée par t_agenda.mois =  t_mois.id_mois
 
 
Voilà j'espère avoir été clair dans l'énoncé de mon problème.  
Notez que je ne suis pas super avancé en SQL.  
 
 
Merci  :jap:


Message édité par J_D_ le 28-09-2009 à 15:15:56

---------------
DTC la 3ème étoile !
Reply

Marsh Posté le 28-09-2009 à 15:13:48   

Reply

Marsh Posté le 28-09-2009 à 15:49:57    

et si tu nous montrais ta requête? t'en penses quoi? (au passage je parie sur un petit group by qui manque)


Message édité par pataluc le 28-09-2009 à 15:50:45
Reply

Marsh Posté le 28-09-2009 à 16:09:04    

Code :
  1. $result = mysql_query ("SELECT id,jour, mois, annee, id_mois, mois_mois FROM t_agenda INNER JOIN t_mois ON t_agenda.mois = t_mois.id_mois ORDER BY annee, mois, jour" ) or die (mysql_error());
  2. while ($myrow=mysql_fetch_array($result))
  3. {
  4. echo"
  5. <span class="vert">$myrow[mois_mois] $myrow[annee]</span><br />n";
  6. $annee= "$myrow[annee]";
  7. $mois = "$myrow[mois]";
  8. $jour = "$myrow[jour]";
  9.     $resultat = mysql_query ("SELECT id, jour, mois, annee, titre, contenu, id_mois, mois_mois FROM t_agenda INNER JOIN t_mois ON t_agenda.mois = t_mois.id_mois WHERE annee = $annee AND mois = $mois AND jour = $jour ORDER BY jour" ) or die (mysql_error());
  10.     while ($myrow=mysql_fetch_array($resultat))
  11.     {
  12. $date2 = "$myrow[jour] $myrow[mois_mois] $myrow[annee]";
  13. $titre = utf8_decode($myrow[titre]);
  14. $contenu = utf8_decode($myrow[contenu]);
  15. echo"
  16. $date2 : $titre<br />
  17. $contenu<br/><br />n";
  18.     }
  19. }


Après être parti dans une bonne dizaine de directions, voilà mon code pour afficher mes événements.  
 
Pas de GROUP BY que ne connais pas.  
 
Voilà quoi.


---------------
DTC la 3ème étoile !
Reply

Marsh Posté le 28-09-2009 à 16:37:30    

ta table t_mois elle sert à faire la correspondance 09=>Septembre, 10=>Octobre, etc?  tu sais qu'il y a des fonctions en php (comme dans tous les languages) qui font ca très bien? http://fr.php.net/manual/fr/function.date.php

 

ensuite, pourquoi fais tu x requêtes (1 globale + 1 par ligne 0_o)? ton regroupement tient plus de la présentation des données que des données. Tu fais une seule requête, et à chaque nouvelle ligne, tu n'affiche le titre que s'il est différent du précédent.

 

ca donnerait qqchose comme ca:

Code :
  1. $date1="";
  2. $result = mysql_query ("SELECT id, jour, mois, annee FROM t_agenda ORDER BY annee, mois, jour" ) or die (mysql_error());
  3. while ($myrow=mysql_fetch_array($result))
  4. {
  5.     $temp=date("F Y", mktime(0, 0, 0, 1, $myrow["mois"], $myrow["annee"]));
  6.     if ($temp != $date1)
  7.     {
  8.         echo "<span class=\"vert\">$date1</span><br />\n";
  9.         $date1 = $temp;
  10.     }
  11.     $date2 = date("d F Y", mktime(0, 0, 0, $myrow['jour'], $myrow["mois"], $myrow["annee"]));
  12.     $titre = utf8_decode($myrow[titre]);
  13.     $contenu = utf8_decode($myrow[contenu]);
  14.     echo "$date2 : $titre<br /> $contenu<br/><br />\n";
  15. }

(j'ai pas testé, peut y avoir des erreurs)


Message édité par pataluc le 28-09-2009 à 17:20:23
Reply

Marsh Posté le 28-09-2009 à 17:17:09    

J'ai essayé avec ton code j'ai corrigé 2-3 trucs mais le résultat n'est pas bon.  
 
aperçu :  
 

Code :
  1. January 2008
  2. 07 May 2008 : Exemple
  3. Donec vel turpis in est aliquam sagittis. Donec arcu turpis, lobortisid vehicula nec, tincidunt quis mauris. Fusce condimentum, risus aullamcorper ornare, massa neque rutrum arcu, quis porta lectus risus idturpis. Etiam elit diam, consequat ac tempus vitae, fringilla eu ipsum.Vivamus id ante ac mi eleifend viverra nec eu enim. Morbi condimentumtristique massa, egestas mollis nunc egestas at. Donec sed nisl mi, arutrum sapien. Suspendisse eget aliquet diam. Morbi ac purus quam, adapibus quam. Quisque fringilla faucibus dolor sed egestas.
  4. January 2009
  5. 10 October 2009 : Exemple 2
  6. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam molestie,sapien vitae rutrum volutpat, nunc sem tincidunt ipsum, quis luctusfelis nulla nec diam. Quisque sit amet porttitor metus. Quisque turpisneque, tempor id laoreet eu, vulputate mattis libero. Donec at lacuseros. Aenean fermentum eros eu lorem interdum et vulputate quampulvinar. Donec eget sapien ac mauris vehicula suscipit ac a ipsum.Integer tincidunt, arcu quis hendrerit interdum, turpis est portaipsum, et pellentesque risus est hendrerit eros. Duis a quam tellus.Nulla facilisi. In sagittis dignissim urna, at rhoncus mi euismodsemper.
  7. January 2010
  8. 03 June 2012 : Exemple 1
  9. Fusce vel neque non augue fringilla vestibulum ut eu urna. Aenean euante elit, eget porta velit. Curabitur dui sem, tincidunt necpellentesque vel, eleifend ut arcu. Morbi quam magna, commodo vitaepulvinar in, bibendum nec lacus. Aenean nec tellus nisl, nec dapibusmi. Fusce sagittis dui nec arcu pretium non hendrerit lacus rutrum.Vestibulum ante ipsum primis in faucibus orci luctus et ultricesposuere cubilia Curae; Suspendisse eleifend nisl eros.


 :??:


---------------
DTC la 3ème étoile !
Reply

Marsh Posté le 28-09-2009 à 17:26:58    

c'est parce que le mktime prend un format de date US, donc dans l'ordre Mois-Jour-Année et pas Jour-Mois-Année.  en inversant mois et jour dans les 2 instructions mktime c'est mieux...


Message édité par pataluc le 28-09-2009 à 17:27:27
Reply

Marsh Posté le 28-09-2009 à 17:46:36    

Oué ça marche mieux anéfé. Merci  
 
Il ne me reste plus qu'à trouver un truc magique pour mettre les mois en français  :D


---------------
DTC la 3ème étoile !
Reply

Marsh Posté le 28-09-2009 à 17:56:10    

J_D_ a écrit :

Oué ça marche mieux anéfé. Merci  
 
Il ne me reste plus qu'à trouver un truc magique pour mettre les mois en français  :D

visiblement il faut plus utiliser date() mais strftime() et ca roulotte... (avec éentuellement un setlocale FR devant, cf http://fr2.php.net/manual/fr/function.strftime.php)

Reply

Marsh Posté le 28-09-2009 à 18:56:42    

Supaÿr!  
 
Par contre c'est pas cool. En Anglais ça marche nickel, il met une majuscule au début du mot alors qu'avec le setlocale, il ne le fait pas.
 
 
EDIT : C'est bon, c'est trouvé.  
 
Merci pour ton aide Pataluc. C'était bien sympa. [:sqel]


Message édité par J_D_ le 28-09-2009 à 19:58:38

---------------
DTC la 3ème étoile !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed