Problème de recuperation de données avec une jointure [Résolu]

Messages postés
458
Date d'inscription
lundi 24 août 2009
Dernière intervention
8 décembre 2018
- - Dernière réponse : msi79
Messages postés
458
Date d'inscription
lundi 24 août 2009
Dernière intervention
8 décembre 2018
- 4 juil. 2017 à 00:59
Bonjour,
je voudrais afficher les les champs de la table inscription et de la tb_moy_general même si l’élève n'a pas de moyenne dans la table tb_moy_general

il se trouve que des resultats son affiché que lorsque les moyennes de l’élève se trouve dans la table tb_moy_general

voici ma requête :
SELECT *
	                    ,ROUND(C.mg,2) moyenne
	             FROM `tb_moy_general` C
				       RIGHT JOIN `inscription` I ON(C.id_elv = I.id_inscri)
				 WHERE C.promo = '{$promo}' 
				 AND C.perode ='{$trim}'
				 AND C.classe = '{$classe}'
Afficher la suite 

Votre réponse

3 réponses

Messages postés
23614
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 décembre 2018
0
Merci
Msi... encore une fois ...

Lorsque ta question concerne un prolème de code php.. tu postes dans le forum PHP ... mais, comme c'est le cas actuellement, ta question concerne un souci de REQUETE ... il faut poster ta question dans le forum SQL (j'ai déplacé ta question au bon endroit....)

Concernant ta question.... il nous faudrait :
- Un DUMP de tes tables qu'on puisse faire quelques tests
- Un exemple concret de ce que tu souhaites obtenir.



msi79
Messages postés
458
Date d'inscription
lundi 24 août 2009
Dernière intervention
8 décembre 2018
-
CREATE TABLE IF NOT EXISTS `inscription` (
`id_inscri` int(11) NOT NULL AUTO_INCREMENT,
`num` varchar(60) NOT NULL,
`annee_scolaire` varchar(15) NOT NULL,
`matricule` varchar(15) NOT NULL,
`affecte` varchar(80) NOT NULL,
`nom` varchar(200) NOT NULL,
`prenom` varchar(220) NOT NULL,
`date_naiss` varchar(30) NOT NULL,
`sexe` varchar(5) NOT NULL,
`nationalite` varchar(80) NOT NULL,
`etabl_orgin` varchar(200) NOT NULL,
`drenet` varchar(150) NOT NULL,
`niv_precdt` varchar(30) NOT NULL,
`decision_admissibilite` varchar(60) NOT NULL,
`tel` varchar(30) NOT NULL,
`fax` varchar(30) NOT NULL,
`mail` varchar(150) NOT NULL,
`site` varchar(150) NOT NULL,
`pere` varchar(200) NOT NULL,
`telP` varchar(15) NOT NULL,
`mere` varchar(200) NOT NULL,
`telM` varchar(15) NOT NULL,
`prers_ct` varchar(200) NOT NULL,
`contact` varchar(30) NOT NULL,
`date` datetime NOT NULL,
`session` varchar(80) NOT NULL,
`id_classe` int(11) NOT NULL,
`color` int(5) NOT NULL,
PRIMARY KEY (`id_inscri`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ;
Commenter la réponse de jordane45
Messages postés
458
Date d'inscription
lundi 24 août 2009
Dernière intervention
8 décembre 2018
0
Merci
Voici par exemple 2 élèves de la classe de 3ième


qui n'ont pas de moyenne dans la table tb_moy_general

mais je voudrais afficher leur nom,prenom etc..
jordane45
Messages postés
23614
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 décembre 2018
-
Comme à ton habitude... tu ne réponds qu'à la moitié de mes questions... et de façon toujours aussi peu précise....

Bref.. essayons quand même ...
Que te donne :

SELECT I.*
              ,ROUND(C.mg,2)  AS moyenne
FROM inscription I
LEFT JOIN tb_moy_general C ON C.id_elv = I.id_inscri
WHERE C.promo = '{$promo}' 
   AND C.perode ='{$trim}'
   AND C.classe = '{$classe}'
Commenter la réponse de msi79
Messages postés
458
Date d'inscription
lundi 24 août 2009
Dernière intervention
8 décembre 2018
0
Merci
ça me retourne toujours rien.


CREATE TABLE IF NOT EXISTS `inscription` (
`id_inscri` int(11) NOT NULL AUTO_INCREMENT,
`num` varchar(60) NOT NULL,
`annee_scolaire` varchar(15) NOT NULL,
`matricule` varchar(15) NOT NULL,
`affecte` varchar(80) NOT NULL,
`nom` varchar(200) NOT NULL,
`prenom` varchar(220) NOT NULL,
`date_naiss` varchar(30) NOT NULL,
`sexe` varchar(5) NOT NULL,
`nationalite` varchar(80) NOT NULL,
`etabl_orgin` varchar(200) NOT NULL,
`drenet` varchar(150) NOT NULL,
`niv_precdt` varchar(30) NOT NULL,
`decision_admissibilite` varchar(60) NOT NULL,
`tel` varchar(30) NOT NULL,
`fax` varchar(30) NOT NULL,
`mail` varchar(150) NOT NULL,
`site` varchar(150) NOT NULL,
`pere` varchar(200) NOT NULL,
`telP` varchar(15) NOT NULL,
`mere` varchar(200) NOT NULL,
`telM` varchar(15) NOT NULL,
`prers_ct` varchar(200) NOT NULL,
`contact` varchar(30) NOT NULL,
`date` datetime NOT NULL,
`session` varchar(80) NOT NULL,
`id_classe` int(11) NOT NULL,
`color` int(5) NOT NULL,
PRIMARY KEY (`id_inscri`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ;
jordane45
Messages postés
23614
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 décembre 2018
-
La structure de ta BDD ne semble pas être optimale...
Déjà .. avoir une table MOYENNE ne sert à rien vu que tu peux les calculer en live directement à partir des notes....
Il semble également que tu aies certaines données redondantes....


Regarde cette structure :
-- --------------------------------------------------------
-- Hôte :                        127.0.0.1
-- Version du serveur:           10.1.16-MariaDB - mariadb.org binary distribution
-- SE du serveur:                Win32
-- HeidiSQL Version:             9.4.0.5125
-- --------------------------------------------------------

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

-- Export de la structure de la table msi. classe
DROP TABLE IF EXISTS `classe`;
CREATE TABLE IF NOT EXISTS `classe` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- Export de données de la table msi.classe : ~2 rows (environ)
DELETE FROM `classe`;
/*!40000 ALTER TABLE `classe` DISABLE KEYS */;
INSERT INTO `classe` (`id`, `nom`) VALUES
	(1, 'classe 1'),
	(2, 'classe 2');
/*!40000 ALTER TABLE `classe` ENABLE KEYS */;

-- Export de la structure de la table msi. classe_eleve
DROP TABLE IF EXISTS `classe_eleve`;
CREATE TABLE IF NOT EXISTS `classe_eleve` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_classe` int(11) NOT NULL,
  `id_eleve` int(11) NOT NULL,
  `periode_scolaire_deb` date NOT NULL,
  `periode_scolaire_fin` date NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id_classe` (`id_classe`),
  KEY `id_eleve` (`id_eleve`),
  KEY `annee_scolaire` (`periode_scolaire_deb`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- Export de données de la table msi.classe_eleve : ~2 rows (environ)
DELETE FROM `classe_eleve`;
/*!40000 ALTER TABLE `classe_eleve` DISABLE KEYS */;
INSERT INTO `classe_eleve` (`id`, `id_classe`, `id_eleve`, `periode_scolaire_deb`, `periode_scolaire_fin`) VALUES
	(1, 1, 5, '2016-09-01', '2017-07-01'),
	(2, 2, 15, '2016-09-01', '2017-07-01');
/*!40000 ALTER TABLE `classe_eleve` ENABLE KEYS */;

-- Export de la structure de la table msi. inscription
DROP TABLE IF EXISTS `inscription`;
CREATE TABLE IF NOT EXISTS `inscription` (
  `id_inscri` int(11) NOT NULL AUTO_INCREMENT,
  `num` varchar(60) NOT NULL,
  `annee_scolaire` varchar(15) NOT NULL,
  `matricule` varchar(15) NOT NULL,
  `affecte` varchar(80) NOT NULL,
  `nom` varchar(200) NOT NULL,
  `prenom` varchar(220) NOT NULL,
  `date_naiss` varchar(30) NOT NULL,
  `sexe` varchar(5) NOT NULL,
  `nationalite` varchar(80) NOT NULL,
  `etabl_orgin` varchar(200) NOT NULL,
  `drenet` varchar(150) NOT NULL,
  `niv_precdt` varchar(30) NOT NULL,
  `decision_admissibilite` varchar(60) NOT NULL,
  `tel` varchar(30) NOT NULL,
  `fax` varchar(30) NOT NULL,
  `mail` varchar(150) NOT NULL,
  `site` varchar(150) NOT NULL,
  `pere` varchar(200) NOT NULL,
  `telP` varchar(15) NOT NULL,
  `mere` varchar(200) NOT NULL,
  `telM` varchar(15) NOT NULL,
  `prers_ct` varchar(200) NOT NULL,
  `contact` varchar(30) NOT NULL,
  `date` datetime NOT NULL,
  `session` varchar(80) NOT NULL,
  `color` int(5) NOT NULL,
  PRIMARY KEY (`id_inscri`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=latin1;

-- Export de données de la table msi.inscription : ~2 rows (environ)
DELETE FROM `inscription`;
/*!40000 ALTER TABLE `inscription` DISABLE KEYS */;
INSERT INTO `inscription` (`id_inscri`, `num`, `annee_scolaire`, `matricule`, `affecte`, `nom`, `prenom`, `date_naiss`, `sexe`, `nationalite`, `etabl_orgin`, `drenet`, `niv_precdt`, `decision_admissibilite`, `tel`, `fax`, `mail`, `site`, `pere`, `telP`, `mere`, `telM`, `prers_ct`, `contact`, `date`, `session`, `color`) VALUES
	(5, '16-000004', '2016-2017', '11083878F', '', 'KONE', 'CHEMISSOLO FATOUMATA', '24/12/1997', 'F', 'IVOIRIENNE', 'LMT', 'BOUNDIALI', '3ieme', 'Recale', '05886434', '36867042', 'groupeecolesdignon@gmail.com', 'http://www.groupecolesdignon.com/', 'KONE YAYA', '05886434', 'COULIBALY SALIMATA', '05886434', 'KONE YAYA', '05886434', '2016-09-22 12:40:33', 'kletio', 0),
	(15, '16-000014', '2016-2017', '10091531Z', 'prive', 'TRAORE', 'ZIE', '26/07/1995', 'H', 'IVOIRIENNE', 'LYCEE MODERNE TENGRELA', 'BOUNDIALI', '3ieme', 'Recale', '56941764', '36867042', 'groupeecolesdignon@gmail.com', 'http://www.groupecolesdignon.com/', 'TRAORE SINDIE', '06164645', '', '06164645', 'TRAORE DOH', '46215800', '2016-11-12 15:07:19', 'kletio', 0);
/*!40000 ALTER TABLE `inscription` ENABLE KEYS */;

-- Export de la structure de la table msi. matieres
DROP TABLE IF EXISTS `matieres`;
CREATE TABLE IF NOT EXISTS `matieres` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `libelle` varchar(128) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- Export de données de la table msi.matieres : ~2 rows (environ)
DELETE FROM `matieres`;
/*!40000 ALTER TABLE `matieres` DISABLE KEYS */;
INSERT INTO `matieres` (`id`, `libelle`) VALUES
	(1, 'Français'),
	(2, 'Mathématiques');
/*!40000 ALTER TABLE `matieres` ENABLE KEYS */;

-- Export de la structure de la table msi. notes
DROP TABLE IF EXISTS `notes`;
CREATE TABLE IF NOT EXISTS `notes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` date DEFAULT NULL,
  `id_elv` int(11) DEFAULT NULL,
  `id_matiere` int(11) DEFAULT NULL,
  `note` float DEFAULT NULL,
  `exam` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `id_elv` (`id_elv`),
  KEY `id_matiere` (`id_matiere`),
  KEY `date` (`date`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- Export de données de la table msi.notes : ~4 rows (environ)
DELETE FROM `notes`;
/*!40000 ALTER TABLE `notes` DISABLE KEYS */;
INSERT INTO `notes` (`id`, `date`, `id_elv`, `id_matiere`, `note`, `exam`) VALUES
	(1, '2017-05-03', 5, 1, 12.5, 'TD N°1'),
	(2, '2017-05-03', 15, 1, 15, 'TD N°1'),
	(3, '2017-06-03', 15, 2, 9, 'controle 1'),
	(4, '2017-06-07', 15, 2, 17, 'controle 2');
/*!40000 ALTER TABLE `notes` ENABLE KEYS */;

/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;


Et la requête qui va avec :
SELECT I.*
      ,C.*
      ,(SELECT AVG(N.note) as Moyenne
			FROM notes N
			WHERE N.date BETWEEN CE.periode_scolaire_deb AND CE.periode_scolaire_fin
			 AND N.id_elv = I.id_inscri
			GROUP BY N.id_elv
	    ) AS MOYENNE
FROM inscription I
LEFT JOIN classe_eleve CE ON CE.id_eleve = I.id_inscri
LEFT JOIN classe C ON C.id = CE.id_classe
WHERE C.id = 1


Bien sûr tu peux étoffer les tables pour les ajuster à tes besoins.
Par exemple, remettre, dans la table notes, un champ pour le trimestre concerné.
msi79
Messages postés
458
Date d'inscription
lundi 24 août 2009
Dernière intervention
8 décembre 2018
> jordane45
Messages postés
23614
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 décembre 2018
-
merci jordane45 je vais regarder ça de prêt
Commenter la réponse de msi79

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.