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 sql : 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
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 sql : Sélectionner tout - Visualiser dans une fenêtre à part
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 sql : Sélectionner tout - Visualiser dans une fenêtre à part
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 sql : Sélectionner tout - Visualiser dans une fenêtre à part
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 sql : Sélectionner tout - Visualiser dans une fenêtre à part
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 sql : Sélectionner tout - Visualiser dans une fenêtre à part
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 sql : Sélectionner tout - Visualiser dans une fenêtre à part
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 sql : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?