La Communauté Webmaster  forum rss


  Forum-webmaster
  Technique - programmation
  PHP / MySQL
(Modérateurs: Shain, Jey, erwinol, Lilian, lauryv, ToToMaStEr)
  [MySQL] Chapitre, sous-chapitre & sous-sous-chapitre - éviter les boucles ?
« Précédent Suivant »
Pages: [1] Descendre
Répondre    Aviser des réponses    Envoyer le sujet    Imprimer
  Auteur  Sujet: [MySQL] Chapitre, sous-chapitre & sous-sous-chapitre - éviter les boucles ?  (Lu 773 fois)
[MySQL] Chapitre, sous-chapitre & sous-sous-chapitre - éviter les boucles ?
« sur: le 07-03-2007 a 06:23:16 »
glork
Membre récent
*

Hors-Ligne

Sexe: Male
Messages: 9




glork2004
Voir le Profil
Répondre avec citation

Bonjour à tous.
Je suis en train de faire un site de tutoriaux informatiques en tout genre, et je suis bloqué sur un problème assez complexe (pour un gros débutant en SQL comme moi )

En effet, j'ai 3 tables : Cours, Chapitres et Tutoriaux.
Chaque cours peut contenir un nombre illimité de chapitres et chaque chapitre peut contenir un nombre illimité de tutoriaux. Il y a aussi la table Membres qui contiens les données des utilisateurs.

Cependant, je ne sais pas comment éviter de mettre des requêtes dans des boucles (ce qui demande beaucoup de ressources).

Je vous montre un peu mon code :

Code:
$req = mysql_query('
   SELECT   c.cours_id,
      c.cours_user_id,
      c.cours_titre,
      c.cours_intro,
      c.cours_conclusion,
      DATE_FORMAT(c.cours_date, "%d/%m/%Y à %Hh%m") AS cours_date,
      DATE_FORMAT(c.cours_update_date, "%d/%m/%Y à %Hh%m") AS cours_update_date,
      c.cours_image,
      m.user_pseudo,
      m.user_avatar
   FROM cours c
      LEFT JOIN membres m ON c.cours_user_id = m.user_id
   WHERE   c.cours_id = "'.$cours_id.'"
   GROUP BY c.cours_id
');

$cours = mysql_fetch_assoc($req)or die(redirection('index.php','Le cours sélectionné n\'existe pas'));


Jusque là, pas de problèmes. Je séléctionne le cours et je fais une jointure avec la table membres pour afficher le pseudo de l'utilisateur qui a écrit le cours et son avatar.
C'est après que les choses se gâtent :

Code:
$req = mysql_query('
   SELECT   chap_id,
      chap_titre,
      chap_intro,
      chap_conclusion
   FROM   chapitres
   WHERE   chap_cours_id = "'.$cours_id.'"
   ORDER BY chap_id
');

while($chapitre = mysql_fetch_assoc($req))
{
?>
<h2 id="#chapitre-<?php echo $chapitre['chap_id'] ?>"><?php echo $chapitre['chap_titre'] ?></h2>
         <?php echo $chapitre['chap_intro'];

Je sélectionne les chapitres et je fais une boucle.
Maintenant, je veux afficher les tutoriaux (sous-chapitres) et je ne vois pas d'autre choix que de faire encore une boucle \

Code:
$req2 = sql('
            SELECT   tuto_id,
               tuto_cat_id,
               tuto_name,
               tuto_image
            FROM   tutoriaux
            WHERE   tuto_cat_id = "'.$chapitre['chap_id'].'"
            ORDER BY tuto_date
              ');
         while($tuto = mysql_fetch_assoc($req2))
         {
            echo $tuto['tuto_name'] . '<br />';
            ?>
            <div class="tuto_sommaire">
            <img src="<?php echo $tuto['tuto_image'] ?>" alt="" />
         </div>
            <?php
         }
         echo $chapitre['chap_conclusion'];

Voilà. Le problème c'est qu'en faisant cela, je demande beaucoup de ressources à MySQL. Je suis presque sûr qu'il y a un moyen d'éviter ça et je demande votre aide.
Peut-être je dois utiliser une autre structure pour ma base de données ?
Merci d'avance de votre aide.

Rapporter au modérateur  

Re:[MySQL] Chapitre, sous-chapitre & sous-sous-chapitre - éviter les boucles ?
« Répondre #1 sur: le 07-03-2007 a 10:30:28 »
MarvinLeRouge
Superactif
****

Hors-Ligne

Messages: 584





Voir le Profil    WWW
Répondre avec citation

Salut,

Je pense que tu dois pouvoir te restreindre à 3 requètes :

- dans la première, tu récupères la liste des cours, triés par un critère sans équivoque (ex. : tri alphabétique, puis id du cours)
- dans la seconde, tu récupères la liste des chapitres, triés comme les cours, puis par un critère sans équivoque entre chapitres d'un même cours
- dans la troisième, tu récupères la liste des tutoriaux, triés comme les chapitres, puis par un critère sans équivoque entre tutoriaux d'un même chapitre

Rapporter au modérateur  

Développeur web / Création de site internet
jean@ceugniet.com
Jean Ceugniet, Développement web
SIRET : 523 611 044 00018
Re:[MySQL] Chapitre, sous-chapitre & sous-sous-chapitre - éviter les boucles ?
« Répondre #2 sur: le 09-03-2007 a 17:46:31 »
papyboingtown
Membre récent
*

Hors-Ligne

Sexe: Male
Messages: 10



Je ne suis pas un lama!

Voir le Profil    WWW
Répondre avec citation

salut
et pour gagner du temps, tu devrais indexer tes tables, si ce n'est déjà fais
La table cours sur le champ qui correspond à ton titre
La table chapitre sur le champ qui correspond à l'id du cours
La table Tutoriaux sur le champ qui correspond à l'id du chapitre.

Rapporter au modérateur  
Répondre    Aviser des réponses    Envoyer le sujet    Imprimer
Pages: [1] Monter
« Précédent Suivant »
Sauter à: 

Votre statut : Invité
Vous devez être membre pour participer.
 
 
Let’s Encrypt : le certificat SSL gratuit
Tester votre site internet sur différents navigateurs
[WordPress] Des problèmes avec l’administration ?
Rappel : Mettez à jour vos CMS et vos sites E-commerce
Le .fr fête ses 25 années d’existence !
Mesurer votre audience en temps réel avec BubbleStat
Porter réclamation contre Google Panda ?
Zlio n’est plus …
 
 
 
 
 

Copyright (c) Devclic 2002 - 2026 - Tous droits réservés

creation site internet strasbourg