Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1571 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1927323
J_D_
Posté le 28-09-2009 à 15:13:48  profilanswer
 

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 !
mood
Publicité
Posté le 28-09-2009 à 15:13:48  profilanswer
 

n°1927343
pataluc
Posté le 28-09-2009 à 15:49:57  profilanswer
 

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
n°1927345
J_D_
Posté le 28-09-2009 à 16:09:04  profilanswer
 

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 !
n°1927354
pataluc
Posté le 28-09-2009 à 16:37:30  profilanswer
 

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
n°1927374
J_D_
Posté le 28-09-2009 à 17:17:09  profilanswer
 

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 !
n°1927380
pataluc
Posté le 28-09-2009 à 17:26:58  profilanswer
 

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
n°1927388
J_D_
Posté le 28-09-2009 à 17:46:36  profilanswer
 

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 !
n°1927392
pataluc
Posté le 28-09-2009 à 17:56:10  profilanswer
 

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)

n°1927405
J_D_
Posté le 28-09-2009 à 18:56:42  profilanswer
 

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 !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 

Sujets relatifs
Problème de session avec un objet SoapDes Tests Fonctionnels sur requête SQL
Probleme d'update mysqlxml problème affichage dans Firefox
Problème avec splitProbleme debutant sql
Probleme pour placer des éléments swingDouble doublons Access
[RESOLU]Optimisation d'une requête SQLProblème video sous IE
Plus de sujets relatifs à : Problème requête select avec double résultats


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR