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

  FORUM HardWare.fr
  Programmation
  PHP

  Cascade de requête sql pour un système d'archivage [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Cascade de requête sql pour un système d'archivage [résolu]

n°2181327
klemorius
Posté le 20-03-2013 à 03:37:17  profilanswer
 

Bonjour à tous \o/
 
J'ai un petit soucis au sujet d'une partie de mon code. Il fonctionne comme je le souhaite, cependant j'aimerais savoir s'il n'existe pas une meilleur façon de faire.
En gros j'ai une table remplis d'entrées contenant 4 variables : ID, titre, contenu, et date.
Pour un système d'archivage intelligent j'aimerais un affichage de ce genre :
 
--12 - titre5
--02 - titre4
-Janvier
2013
--21 - titre 3
-Décembre
2012
--16 -titre2
--03 -titre1
-Octobre
2011
(toutes ces valeurs sont à titre d'exemple)
 
Du coup j'ai réalisé ce code (sans les "--" ) :

Code :
  1. $extraire1 = $bdd->query("SELECT YEAR(date) AS annee FROM GSP_Art GROUP BY annee DESC" );
  2. while ($data1 = $extraire1->fetch())
  3. {
  4. $annee = $data1['annee'];
  5. $extraire2 = $bdd->query("SELECT YEAR(date) AS annee, MONTH(date) AS mois FROM GSP_Art GROUP BY mois DESC HAVING annee=$annee" );
  6. while ($data2 = $extraire2->fetch())
  7. {
  8.  $mois = $data2['mois'];
  9.  $moistr = moistr($mois); //Fonction qui traduis le numéro du mois en nom
  10.  $extraire3 = $bdd->query("SELECT titre, MONTH(date) AS mois, DAY(date) AS jour FROM GSP_Art GROUP BY jour DESC HAVING mois=$mois" );
  11.  while ($data3 = $extraire3->fetch())
  12.  {
  13.   $titre = $data3['titre'];
  14.   $jour = $data3['jour'];
  15.   echo "$jour - $titre</br>";
  16.  }
  17.  echo "$moistr</br>";
  18. }
  19. echo "$annee</br>";
  20. }
  21. $extraire1->closeCursor();
  22. $extraire2->closeCursor();
  23. $extraire3->closeCursor();


 
Qui fait son boulot... Enfin presque il reste une petite subtilité dans le cas de plusieurs articles le même jour... Mais j'aimerais savoir si je ne peux pas directement récupérer puis ordonner et grouper les résultats d'une seule requête pour par la suite obtenir le même affichage que précédemment.
Merci de m'avoir lu et merci pour de potentielles réponses =)


Message édité par klemorius le 23-03-2013 à 15:15:38
mood
Publicité
Posté le 20-03-2013 à 03:37:17  profilanswer
 

n°2181494
klemorius
Posté le 21-03-2013 à 03:36:05  profilanswer
 

up

n°2181649
bistouille
Posté le 21-03-2013 à 20:32:40  profilanswer
 

En effet faire des select dans des boucles n'est pas vraiment l'idéal, il est préférable de traiter les résultat avec php.
 
En gros tu fais juste ta sélection avec un order by desc sur ta date, puis lors de ta boucle while, il suffit de tester si l'année change, idem pour le mois.

n°2181733
rufo
Pas me confondre avec Lycos!
Posté le 22-03-2013 à 10:48:16  profilanswer
 

+1 pour la solution de Bistouille. Un sgbd, c'est fait pour filtrer, un langage de programmation, pour traiter le résultat filtré.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2182019
klemorius
Posté le 23-03-2013 à 15:12:38  profilanswer
 

Problème résolu ! En fait j'ai fini par avoir un indice sur le forum du SDZ et j'ai produis ceci :
 

Code :
  1. $annee_av = 2113;
  2. $extraire = $bdd->query("SELECT id, titre, YEAR(date) AS annee, MONTH(date) AS mois, DAY(date) AS jour, DATE_FORMAT(date, '%H%i%s') AS heure FROM GSP_Art ORDER BY id DESC" );
  3. while($data = $extraire->fetch())
  4. {
  5.     $annee = $data['annee'];
  6.     $mois = $data['mois'];
  7.     $jour = $data['jour'];
  8.     $heure = $data['heure'];
  9.     $titre = $data['titre'];
  10.     if($annee < $annee_av)
  11.     {
  12.         echo "$annee</br>";
  13.         $mois_av = 13;
  14.         $annee_av = $annee;
  15.     }
  16.     if($mois < $mois_av)
  17.     {
  18.         echo "-$mois</br>";
  19.         $jour_av = 32;
  20.         $mois_av = $mois;
  21.     }
  22.     if($jour < $jour_av)
  23.     {
  24.         echo "--$jour</br>";
  25.         $heure_av = 250000;
  26.         $jour_av = $jour;
  27.     }
  28.     if($heure < $heure_av)
  29.     {
  30.         echo "---$titre</br>";
  31.         $heure_av = $heure;
  32.     }
  33. }
  34. $extraire->closeCursor();


 
Et effectivement je suis d'accord avec vous :wahoo:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Cascade de requête sql pour un système d'archivage [résolu]

 

Sujets relatifs
Problème jointure requête sql.logiciel requete sql par mail
Création d'un système d’identification securiséRequete http qui prend plusieurs minutes
Abandon de requete httpclientrequete SQL et variables
[VBA] fonction paramétré renvoyant le résultat d'une requête ACCESS[Access] Problème formulaire requête
Requete SqLrequete sql non envoyé au serveur
Plus de sujets relatifs à : Cascade de requête sql pour un système d'archivage [résolu]


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