Aide sur une requête SQL avec MySQL

MySQL

a marqué ce sujet comme résolu.

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

A la fin, tu mets : GROUP BY cours.id

Ca veut dire que tu veux une seule ligne par cours.id ; MySQL est très tolérant (gros défaut à mon gout), il accepte ta requete , et il met par exemple la note max ou min, ou une note au hasard …). D’autres SGBD diraient que ta requete est incorrecte.

Enève la clause GROUP BY cours.id et ça devrait donner le résultat voulu.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte