petit souci sur le rsultat d'une requête SELECT MySQL

Eléphanteau du PHP | 25 Messages

17 déc. 2023, 22:23

Bonjour tout le monde je demande votre aide à propos d'une requêtte select depuis plusiers tables(voir ci-dessous)

le problème c'est que la jointure des trois table me donne des resultat dupliqués

le resultat que je veux comme :

1111 | jean | lucas | CE1| Septembre |0.00|impayé|Septembre |0.00|impayé
1111 | jean | lucas | CE1| Octobre |0.00|impayé|Octobre |0.00|impayé
1111 | jean | lucas | CE1| novembre |0.00|impayé|novembre |0.00|impayé
1111 | jean | lucas | CE1| decembre |0.00|impayé|decembre |0.00|impayé
1111 | jean | lucas | CE1| janvier |0.00|impayé|janvier |0.00|impayé
1111 | jean | lucas | CE1| fevrier |0.00|impayé|fevrier |0.00|impayé
1111 | jean | lucas | CE1| mars |0.00|impayé|mars |0.00|impayé
1111 | jean | lucas | CE1| avril |0.00|impayé|avril |0.00|impayé
1111 | jean | lucas | CE1| mai |0.00|impayé|mai |0.00|impayé
1111 | jean | lucas | CE1| juin |0.00|impayé|juin |0.00|impayé


j'ai essayé une jointure à la normal mais hélas elle me sorte chaque ligne dupliquée 10 fois :cry: :cry: :cry:

Code : Tout sélectionner

SELECT mt.massar,mt.nom,mt.prenom,mt.classe, ut.s_mois,ut.s_montant,ut.s_statut, ct.t_mois,ct.t_montant,ct.t_statut FROM etudiant mt INNER JOIN tb_spaiement ut on mt.massar = ut.massar LEFT JOIN tb_tpaiement ct on mt.massar = ct.t_massar WHERE mt.massar = '1111'

Ma table Etudiant:

Code : Tout sélectionner

CREATE TABLE `etudiant` ( `id` int(11) NOT NULL, `massar` varchar(20) NOT NULL, `nom` varchar(30) NOT NULL, `prenom` varchar(30) NOT NULL, `classe` varchar(30) NOT NULL, `transport` varchar(30) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -- -- Déchargement des données de la table `etudiant` -- INSERT INTO `etudiant` (`id`, `massar`, `nom`, `prenom`, `classe`, `transport`) VALUES (1, '1111', 'jean', 'lucas', 'CE1', 'oui');
Ma table tb_spaiement:

Code : Tout sélectionner

CREATE TABLE `tb_spaiement` ( `id` int(11) NOT NULL, `massar` varchar(20) DEFAULT NULL, `s_mois` varchar(20) DEFAULT NULL, `s_montant` decimal(8,2) NOT NULL, `s_statut` varchar(20) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; -- -- Déchargement des données de la table `tb_spaiement` -- INSERT INTO `tb_spaiement` (`id`, `massar`, `s_mois`, `s_montant`, `s_statut`) VALUES (1, '1111', 'Septembre', '0.00', 'Impayé'), (2, '1111', 'Octobre', '0.00', 'Impayé'), (3, '1111', 'Novembre', '0.00', 'Impayé'), (4, '1111', 'Décembre', '0.00', 'Impayé'), (5, '1111', 'Janvier', '0.00', 'Impayé'), (6, '1111', 'Février', '0.00', 'Impayé'), (7, '1111', 'Mars', '0.00', 'Impayé'), (8, '1111', 'Avril', '0.00', 'Impayé'), (9, '1111', 'Mai', '0.00', 'Impayé'), (10, '1111', 'Juin', '0.00', 'Impayé');
ma table tb_tpaiement :

Code : Tout sélectionner

CREATE TABLE `tb_tpaiement` ( `id` int(11) NOT NULL, `t_massar` varchar(20) NOT NULL, `t_mois` varchar(20) DEFAULT NULL, `t_montant` decimal(8,2) NOT NULL, `t_statut` varchar(20) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; -- -- Déchargement des données de la table `tb_tpaiement` -- INSERT INTO `tb_tpaiement` (`id`, `t_massar`, `t_mois`, `t_montant`, `t_statut`) VALUES (1, '1111', 'Septembre', '0.00', 'Impayé'), (2, '1111', 'Octobre', '0.00', 'Impayé'), (3, '1111', 'Novembre', '0.00', 'Impayé'), (4, '1111', 'Décembre', '0.00', 'Impayé'), (5, '1111', 'Janvier', '0.00', 'Impayé'), (6, '1111', 'Février', '0.00', 'Impayé'), (7, '1111', 'Mars', '0.00', 'Impayé'), (8, '1111', 'Avril', '0.00', 'Impayé'), (9, '1111', 'Mai', '0.00', 'Impayé'), (10, '1111', 'Juin', '0.00', 'Impayé');

Avatar du membre
Mammouth du PHP | 1476 Messages

19 déc. 2023, 11:30

Essaye un DISTINCT SQL sur ut.s_mois ou t_mois, à voir.