menu avec boucle

menu avec boucle - PHP - Programmation

Marsh Posté le 31-01-2006 à 10:54:04    

Bonjour,  
 
Voici mon problème.
 
J'ai une table 'categorie' avec cat_cle (id) et cat_lib (libellé) de la catégorie.
J'ai une table 'documents' avec doc_cle (id), doc_lib (libellé), doc_date, doc_cat (catégorie du doc)
 
Je souhaite faire un menu avec de cette manière :  
 1. categorieA
  1a. document1 de la catégorie A
  1b. document2 de la catégorie A
  1c. document3 de la catégorie A
 2. catégorieB
  2a. document1 de la catégorie B
  2b. document2 de la catégorie B...
 
Avez-vous une solution?

Reply

Marsh Posté le 31-01-2006 à 10:54:04   

Reply

Marsh Posté le 31-01-2006 à 10:57:55    

tu choisis dabord toutes tes catégories de ta table categorie que tu ordonnes sur le libellé, et ensuite dans la boucle tu dois refaire une requete ou tu choisis les documents de cette catégorie.
 
Tu peux aussi le faire en 1 seul boucle avec des jointures en y réfléchissant un minimum

Reply

Marsh Posté le 31-01-2006 à 10:59:58    

Je ne vois pas trop où est le problème ...
 
Tu fais une requete(avec une jointure entre tes deux tables) qui te remonte tous les enregistrements.
Ensuite tu parcours tous les resultats et tu affiches au fur et à mesure.
 
 
edit: [:grilled] mais perso je ne recommande pas de faire la solution avec les requetes dans la boucle


Message édité par anapajari le 31-01-2006 à 11:01:35
Reply

Marsh Posté le 31-01-2006 à 11:01:40    

juste pour afficher les différentes catégories , que tu ne dois afficher qu'une fois.
 
c pour ca que j'ai mis "un minimum" :)

Reply

Marsh Posté le 31-01-2006 à 11:05:12    

ça donnerai quoi dans le code car j'ai essayé pas mal de chose avant de posté ce message ...

Reply

Marsh Posté le 31-01-2006 à 11:10:14    

Code :
  1. for($i=0; $i<count($categorie); $i++) {
  2.    echo $i,'. Categorie',$categorie[$i]['cat_lib'],'<br />';
  3.    for($j=0; $j<count($document); $j++) {
  4.       if($document[$j]['doc_cat'] == $categorie[$i]){
  5.          echo '&nbsp;&nbsp;',$i,$document[$j]['libelle'],'. document',$j,' de la cat&eacute;gorie ',$categorie[$i]['cat_lib'],'<br />;
  6.       }
  7.    }
  8. }


 
heu... en même temps tu ne précise pas grand chose, (si tu t'y connais, ou pas, comment sont contenues ces informations...) donc si cela te convient...


Message édité par darkendorf le 31-01-2006 à 11:11:38
Reply

Marsh Posté le 31-01-2006 à 11:19:03    

a quoi correspondent $categorie, $document?
où est-ce que je fais ma requete? et quelle requete?

Reply

Marsh Posté le 31-01-2006 à 11:21:33    

donc on est en mode 'je veux'
 
un point : tu sais ce que tu veux
 
les problèmes :
- en php ?
- depuis une base de données ?
- tu sais construire une requête sql ?
- tu sais accéder au résultat de ta requête ?

Reply

Marsh Posté le 31-01-2006 à 11:23:45    

Selon Les regles du forum

Citation :

[0C] On ne fait pas le boulot à votre place.
 
    * Les demandes du style "vous pouvez faire un programme faisant [...] pour moi ?" sont assez mal vues et n'obtiennent que très rarement de réponses.


 
Alors montre nous ou tu en es dans ton code et on se fera un plaisir de t'aider. Mais personne ne va te faire ton truc en entier!


Message édité par anapajari le 31-01-2006 à 11:25:02
Reply

Marsh Posté le 31-01-2006 à 11:33:29    

Voilà où j'en suis : pb en visualisation chaque doc est répété dans chaque catégories. il ne tri pas les doc par catégorie
 
$sql = " SELECT cat_cle, cat_lib FROM categorie WHERE cat_cle < 8 ORDER BY cat_lib DESC ";
         $qry = pg_query ($conn, $sql);
         while ($result = pg_fetch_assoc($qry))
          {
          echo $result['cat_lib'] . "<br>";
          $sql2 = " SELECT doc_cle, doc_lib, doc_file, doc_type, doc_cat, cat_cle FROM documents INNER JOIN categorie ON cat_cle=doc_cat ORDER BY doc_lib DESC ";
          $qry2 = pg_query ($conn, $sql2);
          $clefile = $result2['doc_file'];
          if ($result2['doc_cat'] == $result2['cat_cle'])
           {
           while ($result2 = pg_fetch_assoc($qry2))
            {
            echo $result2['doc_lib'] . "<br>";
            }
           }
          }

Reply

Marsh Posté le 31-01-2006 à 11:33:29   

Reply

Marsh Posté le 31-01-2006 à 11:48:57    

illisible...
 
où est-ce que ça bloque là dedans ?

Reply

Marsh Posté le 31-01-2006 à 11:57:14    

Tu as tout mélangé :D
Si tu fais des requetes dans ta boucle tu n'as pas besoin de faire une jointure sur la 2eme. Change là en:

Code :
  1. $sql2 = "SELECT doc_cle, doc_lib, doc_file, doc_type, doc_cat, FROM documents  where doc_cat =".$result['cat_cle']." ORDER BY doc_lib DESC";


 
Par contre je le redis, c'est pas terrible comme solution parce que si tu as 100 catégories tu vas faire 101 requêtes , alors qu'une seule suffisait!

Reply

Marsh Posté le 31-01-2006 à 12:13:39    

ouai mai en une ma requete donne quoi?

Reply

Sujets relatifs:

Leave a Replay

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