Bonjour tout le monde,
j’espère que vous allez bien.
Je viens vers vous pour vous demandez de l’aide par apport à une requête qui me complique la vie.
J’ai 4 tables SQL: la table CLASSES, COURS, ELEVES et NOTES
pour la table CLASSES on a:
CREATE TABLE `classes` (
`id` int NOT NULL AUTO_INCREMENT,
`nom` varchar(255) NOT NULL,
`id_professeur` int DEFAULT NULL,
`id_etablissement` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `id_professeurs_classes_idx` (`id_professeur`),
KEY `id_etablissement_classes_idx` (`id_etablissement`),
CONSTRAINT `id_etablissement_classes` FOREIGN KEY (`id_etablissement`) REFERENCES `etablissements` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `id_professeurs_classes` FOREIGN KEY (`id_professeur`) REFERENCES `professeurs` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
Pour la table COURS on a:
CREATE TABLE `cours` (
`id` int NOT NULL AUTO_INCREMENT,
`nom` varchar(255) NOT NULL,
`total` int NOT NULL,
`id_professeur` int DEFAULT NULL,
`id_classe` int DEFAULT NULL,
`id_etablissement` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `id_professeur_cours_idx` (`id_professeur`),
KEY `id_classes_cours_idx` (`id_classe`),
KEY `id_etablissement_cours_idx` (`id_etablissement`),
CONSTRAINT `id_classes_cours` FOREIGN KEY (`id_classe`) REFERENCES `classes` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `id_etablissement_cours` FOREIGN KEY (`id_etablissement`) REFERENCES `etablissements` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `id_professeur_cours` FOREIGN KEY (`id_professeur`) REFERENCES `professeurs` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
Pour la table NOTES on a:
CREATE TABLE `notes` (
`id` int NOT NULL AUTO_INCREMENT,
`id_eleve` int DEFAULT NULL,
`id_classe` int DEFAULT NULL,
`id_etablissement` int DEFAULT NULL,
`id_cours` int DEFAULT NULL,
`point` varchar(255) NOT NULL,#point obtenu
`note` int NOT NULL, #mention en étoile
PRIMARY KEY (`id`),
KEY `id_eleves_notes_idx` (`id_eleve`),
KEY `id_classes_notes_idx` (`id_classe`),
KEY `id_etablissement_notes_idx` (`id_etablissement`),
KEY `id_cours_notes_idx` (`id_cours`),
CONSTRAINT `id_classes_notes` FOREIGN KEY (`id_classe`) REFERENCES `classes` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `id_cours_notes` FOREIGN KEY (`id_cours`) REFERENCES `cours` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `id_eleves_notes` FOREIGN KEY (`id_eleve`) REFERENCES `eleves` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `id_etablissement_notes` FOREIGN KEY (`id_etablissement`) REFERENCES `etablissements` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
et en fin pour la table ELEVES on a:
CREATE TABLE `eleves` (
`id` int NOT NULL AUTO_INCREMENT,
`code_secret` text NOT NULL,
`nom` varchar(255) NOT NULL,
`postnom` varchar(255) NOT NULL,
`prenom` varchar(255) NOT NULL,
`sexe` varchar(255) NOT NULL,
`dateDeNaissance` varchar(255) NOT NULL,
`id_ville` int DEFAULT NULL,
`id_classe` int DEFAULT NULL,
`id_etablissement` int DEFAULT NULL,
`photo` text NOT NULL,
PRIMARY KEY (`id`),
KEY `id_villes_eleves_idx` (`id_ville`),
KEY `id_classes_eleves_idx` (`id_classe`),
KEY `id_etablissements_eleves_idx` (`id_etablissement`),
CONSTRAINT `id_classes_eleves` FOREIGN KEY (`id_classe`) REFERENCES `classes` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `id_etablissements_eleves` FOREIGN KEY (`id_etablissement`) REFERENCES `etablissements` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `id_villes_eleves` FOREIGN KEY (`id_ville`) REFERENCES `villes` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
Mon problème: Je souhaite avoir les notes de chaque eleve par apport à chaque cours existant pour une classe donnée. par exemple, pour Je souhaite avoir toutes les notes des élèves du CP1 pour chaque cours (que la note d’un cours soit NULL ou pas ).
Voici ma requête:
Use my_db;
SELECT `cours`.`id` AS id_cours, `cours`.`nom` AS nom_cours, `cours`.`total` AS total, `classes`.`id` AS id_classe, `classes`.`nom` AS nom_classe, `notes`.`point` AS point_obtenu, `notes`.`note` AS mention, `eleves`.`nom` AS nom_eleve FROM `cours` INNER JOIN `classes` ON `classes`.`id`=`cours`.`id_classe` LEFT JOIN `notes` ON `notes`.`id_cours`=`cours`.`id` INNER JOIN `eleves` ON `eleves`.`id_classe`=`classes`.`id` WHERE `cours`.`id_etablissement`=3 GROUP BY `cours`.`id`
Malheureusement, j’obtiens juste chaque cours avec une note qui lui correspond, hors ce n’est pas ce que je veux moi je veux par exemple dans un même résultat les notes de chaque élève en mathématique, franais,…
Merci d’avance pour vos orientations