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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 $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'));
C'est après que les choses se gâtent :
Je sélectionne les chapitres et je fais une boucle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 $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'];
Maintenant, je veux afficher les tutoriaux (sous-chapitres) et je ne vois pas d'autre choix que de faire encore une boucle![]()
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 $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'];![]()
Peut-être je dois utiliser une autre structure pour ma base de données ?
Merci d'avance de votre aide.
Partager