PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#26 10-02-2012 04:29:49

rimie
Membre
Inscription : 17-11-2011
Messages : 50

Re : Lister les etudiants d'une classe par jour d'examen

le but de l'exemple c'est de comprendre bien les JOINTURES et leurs comportements, maintenant, il me reste juste la bonne mise en forme comme cite ci-dessus

Hors ligne

#27 12-02-2012 01:42:24

rimie
Membre
Inscription : 17-11-2011
Messages : 50

Re : Lister les etudiants d'une classe par jour d'examen

est ce qu'il y a une solution pour la facon de grouper les etudiants par jour?

Hors ligne

#28 13-02-2012 09:32:18

rimie
Membre
Inscription : 17-11-2011
Messages : 50

Re : Lister les etudiants d'une classe par jour d'examen

est ce qu'il n y a pas une solution, ou bien je dois changer la structure de mes tables?

Hors ligne

#29 15-02-2012 12:49:48

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Lister les etudiants d'une classe par jour d'examen

Bien, après une longue absence, je reprends ce fil.
J'ai donc modifié ta base de données comme suit :


--
-- Structure de la table 'jours'
--

DROP TABLE IF EXISTS jours;
CREATE TABLE IF NOT EXISTS jours (
  idj int(3) NOT NULL AUTO_INCREMENT,
  jour date NOT NULL,
  PRIMARY KEY (idj),
  UNIQUE KEY jour (jour)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Contenu de la table 'jours'
--

INSERT INTO jours (idj, jour) VALUES
(1, '2011-01-01'),
(2, '2011-01-02'),
(3, '2011-01-03'),
(4, '2011-01-04'),
(5, '2011-01-05'),
(6, '2011-01-06'),
(7, '2011-01-07');
-- --------------------------------------------------------

--
-- Structure de la table 'classes'
--

DROP TABLE IF EXISTS classes;
CREATE TABLE IF NOT EXISTS classes (
  idc int(2) NOT NULL AUTO_INCREMENT,
  classe varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (idc)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Contenu de la table 'classes'
--

INSERT INTO classes (idc, classe) VALUES
(1, 'classe1'),
(2, 'classe2');

-- --------------------------------------------------------

--
-- Structure de la table 'etudiants'
--

DROP TABLE IF EXISTS etudiants;
CREATE TABLE IF NOT EXISTS etudiants (
  ide int(2) NOT NULL AUTO_INCREMENT,
  nom varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (ide)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Contenu de la table 'etudiants'
--

INSERT INTO etudiants (ide, nom) VALUES
(1, 'etudiant1'),
(2, 'etudiant2'),
(3, 'etudiant3'),
(4, 'etudiant4'),
(5, 'etudiant5'),
(6, 'etudiant6'),
(7, 'etudiant7'),
(8, 'etudiant8'),
(9, 'etudiant9'),
(10, 'etudiant10'),
(11, 'etudiant11'),
(12, 'etudiant12'),
(13, 'etudiant13'),
(14, 'etudiant14'),
(15, 'etudiant15');

-- --------------------------------------------------------

--
-- Structure de la table 'jointables'
--

DROP TABLE IF EXISTS jointables;
CREATE TABLE IF NOT EXISTS jointables (
  idetudiant int(11) NOT NULL,
  idjour int(11) NOT NULL,
  idclasse int(11) NOT NULL,
  PRIMARY KEY (idetudiant,idjour,idclasse)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Contenu de la table 'jointables'
--

INSERT INTO jointables (idetudiant, idjour, idclasse) VALUES
(1, 1, 1),
(1, 3, 1),
(2, 1, 1),
(3, 2, 1),
(4, 2, 1),
(5, 3, 1),
(6, 3, 1),
(10, 1, 2),
(10, 3, 2),
(11, 1, 2),
(11, 3, 2),
(12, 2, 2),
(12, 3, 2),
(14, 2, 2);

-- --------------------------------------------------------

Ensuite je lui applique la requête suivante

SELECT classes.classe, jours.jour, GROUP_CONCAT(etudiants.nom) AS liste
FROM joinTables
INNER JOIN etudiants ON joinTables.idetudiant = etudiants.ide
INNER JOIN jours ON joinTables.idjour = jours.idj
INNER JOIN classes ON joinTables.idclasse = classes.idc
GROUP BY classes.classe, jours.jour

Ce qui me retourne le résultat ci-dessous

classe     jour     liste
classe1     2011-01-01     etudiant2,etudiant1
classe1     2011-01-02     etudiant4,etudiant3
classe1     2011-01-03     etudiant1,etudiant6,etudiant5
classe2     2011-01-01     etudiant10,etudiant11
classe2     2011-01-02     etudiant12,etudiant14
classe2     2011-01-03     etudiant11,etudiant10,etudiant12

qui semble bien correspondre à l'attente.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums