Bonjour,
J'ai une table COURS dont voici la structure
En gros il s'agit d'une liste de cours répartis en catégorie (arithmétique, algèbre, géométrie,...), et chacune des catégories est elle même divisée en chapitre (calcul écrit, technique de calcul,...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `id_categorie` smallint(5) unsigned NOT NULL, `id_chapitre` mediumint(5) unsigned NOT NULL, `titre` varchar(150) NOT NULL, `description` text NOT NULL, `youtube` varchar(100) NOT NULL,
Je suis en train de programmer une page categorie.php contenant les 3 premiers cours de chaque chapitre dont l'id_categorie de ce tableau COURS est une valeur précise.
Concrêtement, id_categorie=1 correspond à la catégorie "Arithmétique", et sur cette page Arithmétique je veux afficher les 3 premiers cours de chaque chapitre appartenant à cette catégorie arithmétique.
Quelle est selon vous la méthode la plus optimale pour procéder ?
La solution la plus évidente serait de faire une requête de ce genre :
Et de la répéter autant de fois qu'il y a de chapitre, en changeant donc à chaque fois l'id_chapitre concerné.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT ... FROM Cours WHERE id_categorie=1 AND id_chapitre=1 LIMIT 3
Mais j'ai peur que niveau performance ce ne soit pas efficace !
Sinon j'avais pensé à créer une table temporaire issue de la table Cours mais ne reprenant que les lignes dont id_categorie=1. Et puis à partir de cette table temporaire je ferais ce genre de requête.
Requête à également répéter autant de fois qu'il y a de chapitre différent...
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT ... FROM TMP_Arithmétique WHERE id_chapitre=1 LIMIT 3
Mais pareil, j'ai peur pour les performances car ca ne doit pas etre anodins de créer à chaque fois une table, et puis de faire toutes les requêtes sachant qu'il peut y avoir une vingtaine de chapitres.
Devrais-je m'orienter alors plutôt vers une vue matérialisée ? Mais dans ce cas la je dois prendre en compte le cout de la mise à jour de cette vue matérialisée...
Existe-t-il une solution plus simple à laquelle je n'aurais pas pensé ? Je vous serai très reconnaissant si vous pouviez m'éclairer, merci !
Partager