Optimisations de requêtes SQL
Bonjour,
J'ouvre ce sujet pour vérifier les tables SQL et optimiser, si c'est possible, les requêtes SQL.
Ci-dessous, les :
test_site_utilisateur
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| CREATE TABLE IF NOT EXISTS `test_site_utilisateur` (
`id_utilisateur` int(11) NOT NULL AUTO_INCREMENT,
`nom_etablissement_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL,
`nom_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL,
`prenom_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL,
`date_naissance_utilisateur` date NOT NULL,
`civilite_utilisateur` varchar(12) CHARACTER SET utf8 NOT NULL,
`sexe_utilisateur` varchar(8) CHARACTER SET utf8 NOT NULL,
`acces_utilisateur` int(11) NOT NULL DEFAULT '5',
`email_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL,
`pseudo_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL,
`password_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL,
`code_postal_etablissement_utilisateur` varchar(5) CHARACTER SET utf8 NOT NULL,
`classe_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL,
`matiereenseignee_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL,
`ville_etablissement_utilisateur` varchar(255) CHARACTER SET utf8 NOT NULL,
`date_inscription_utilisateur` datetime NOT NULL,
`date_derniere_connexion_utilisateur` datetime NOT NULL,
`date_creation_classe_utilisateur` datetime NOT NULL,
PRIMARY KEY (`id_utilisateur`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ; |
test_site_relation_cours_tp_utilisateur (table relationnelle)
Code:
1 2 3 4 5 6
| CREATE TABLE IF NOT EXISTS `test_site_relation_cours_tp_utilisateur` (
`id_rel_cours_user` int(11) NOT NULL AUTO_INCREMENT,
`id_cours_tp` int(11) NOT NULL,
`id_utilisateur` int(11) NOT NULL,
PRIMARY KEY (`id_rel_cours_user`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ; |
test_site_cours_tp :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| CREATE TABLE IF NOT EXISTS `test_site_cours_tp` (
`id_cours_tp` int(11) NOT NULL AUTO_INCREMENT,
`date_depot_cours_tp` datetime NOT NULL,
`date_cloture_validation_cours_tp` datetime NOT NULL,
`titre_cours_tp` varchar(255) CHARACTER SET utf8 NOT NULL,
`contenu_cours_tp` longtext CHARACTER SET utf8 NOT NULL,
`type_devoir_cours_tp` int(11) NOT NULL DEFAULT '1',
`matiere_cours_tp` varchar(255) CHARACTER SET utf8 NOT NULL,
`nom_auteur_cours_tp` varchar(255) CHARACTER SET utf8 NOT NULL,
`classe_cours_tp` varchar(255) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`id_cours_tp`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ; |
Ci-dessous, les requêtes SQL :
-De la page qui liste les cours :
// Récupération de l'identifiant connecté dans la base de données
Code:
1 2 3 4
|
SELECT id_utilisateur
FROM test_site_utilisateur
WHERE id_utilisateur=xxxx |
// Sélectionnement du bon Cours/TP (avec son identifiant) de l'élève dans la base de données
Code:
1 2 3 4 5 6 7 8 9
|
SELECT DISTINCT(t3.id_cours_tp), t3.titre_cours_tp, t3.matiere_cours_tp, t3.classe_cours_tp, t3.date_depot_cours_tp,
t3.contenu_cours_tp, t3.nom_auteur_cours_tp, t3.type_devoir_cours_tp, t3.date_cloture_validation_cours_tp
FROM test_site_relation_cours_tp_utilisateur t2
LEFT JOIN test_site_cours_tp t3
ON t2.id_cours_tp = t3.id_cours_tp
WHERE t2.id_utilisateur=".$_SESSION['id_utilisateur']."
AND t3.type_devoir_cours_tp='1'
ORDER BY date_cloture_validation_cours_tp |
-De la page qui affiche un cours :
// Sélectionnement de l'identifiant de l'élève connecté
Code:
1 2 3 4 5
| SELECT id_utilisateur
FROM test_site_utilisateur
WHERE id_utilisateur=".$_SESSION['id_utilisateur']."
AND (acces_utilisateur='1'
OR acces_utilisateur='5') |
// Sélectionnement du bon Cours/TP
Code:
1 2 3 4 5 6 7 8
|
SELECT DISTINCT(date_depot_cours_tp),titre_cours_tp,contenu_cours_tp,matiere_cours_tp,nom_auteur_cours_tp,classe_cours_tp
FROM test_site_cours_tp,test_site_utilisateur
WHERE id_utilisateur=".$_SESSION['id_utilisateur']."
AND type_devoir_cours_tp='1'
AND (acces_utilisateur='1'
OR acces_utilisateur='5')
AND id_cours_tp='$id_cours_tp'; |
A mon avis la requête SQL suivante :
Sélectionnement du bon Cours/TP (avec son identifiant) de l'élève dans la base de données
Code:
1 2 3 4 5 6 7
| SELECT DISTINCT(t3.id_cours_tp), t3.titre_cours_tp, t3.matiere_cours_tp, t3.classe_cours_tp, t3.date_depot_cours_tp, t3.contenu_cours_tp, t3.nom_auteur_cours_tp, t3.type_devoir_cours_tp, t3.date_cloture_validation_cours_tp
FROM test_site_relation_cours_tp_utilisateur t2
LEFT JOIN test_site_cours_tp t3
ON t2.id_cours_tp = t3.id_cours_tp
WHERE t2.id_utilisateur=".$_SESSION['id_utilisateur']."
AND t3.type_devoir_cours_tp='1'
ORDER BY date_cloture_validation_cours_tp |
peut être optimisée.
Qu'en pensez-vous ?