Je n'ai trouvé aucun exemple de relations plusieurs-à-plusieurs MYSQL ici ou dans Google. Ce que je recherche, c'est un exemple très simple où php+mysql affiche les résultats d'une base de données. Quelqu'un peut-il écrire un exemple très simple ?
Ceci est un exemple simple et approximatif du SQL impliqué. Je ne pense pas qu'il soit nécessaire de confondre ce concept avec php. Récupérez simplement la collection comme n’importe quelle autre collection.
Dans cet exemple, il existe de nombreux noms et de nombreuses couleurs. Les gens peuvent avoir plus d’une couleur préférée, et plusieurs personnes peuvent avoir la même couleur préférée. Donc plusieurs à plusieurs.
***** Tables ********** person -------- id - int name - varchar favColor ------------- id - int color - varchar person_color ------------ person_id - int (matches an id from person) color_id - int (matches an id from favColor) ****** Sample Query ****** SELECT name, color FROM person LEFT JOIN person_color ON (person.id=person_id) LEFT JOIN favColor ON (favColor.id=color_id) ****** Results From Sample Query ******* Name - Color --------------- John - Blue John - Red Mary - Yellow Timmy - Yellow Suzie - Green Suzie - Blue etc...
Exemple de scénario : Étudiants et cours dans une université. Un étudiant donné peut suivre plusieurs cours et, naturellement, un cours comptera souvent de nombreux étudiants.
Exemple de tableau, conception simple :
CREATE TABLE `Student` ( `StudentID` INT UNSIGNED NOT NULL AUTO_INCREMENT, `FirstName` VARCHAR(25), `LastName` VARCHAR(25) NOT NULL, PRIMARY KEY (`StudentID`) ) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci CREATE TABLE `Course` ( `CourseID` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, `Code` VARCHAR(10) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL, `Name` VARCHAR(100) NOT NULL, PRIMARY KEY (`CourseID`) ) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci CREATE TABLE `CourseMembership` ( `Student` INT UNSIGNED NOT NULL, `Course` SMALLINT UNSIGNED NOT NULL, PRIMARY KEY (`Student`, `Course`), CONSTRAINT `Constr_CourseMembership_Student_fk` FOREIGN KEY `Student_fk` (`Student`) REFERENCES `Student` (`StudentID`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `Constr_CourseMembership_Course_fk` FOREIGN KEY `Course_fk` (`Course`) REFERENCES `Course` (`CourseID`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=INNODB CHARACTER SET ascii COLLATE ascii_general_ci
Retrouvez tous les étudiants inscrits à un cours :
SELECT `Student`.* FROM `Student` JOIN `CourseMembership` ON `Student`.`StudentID` = `CourseMembership`.`Student` WHERE `CourseMembership`.`Course` = 1234
Retrouvez tous les cours suivis par un élève donné :
SELECT `Course`.* FROM `Course` JOIN `CourseMembership` ON `Course`.`CourseID` = `CourseMembership`.`Course` WHERE `CourseMembership`.`Student` = 5678
Ceci est un exemple simple et approximatif du SQL impliqué. Je ne pense pas qu'il soit nécessaire de confondre ce concept avec php. Récupérez simplement la collection comme n’importe quelle autre collection.
Dans cet exemple, il existe de nombreux noms et de nombreuses couleurs. Les gens peuvent avoir plus d’une couleur préférée, et plusieurs personnes peuvent avoir la même couleur préférée. Donc plusieurs à plusieurs.
Est-ce utile ?
Exemple de scénario : Étudiants et cours dans une université. Un étudiant donné peut suivre plusieurs cours et, naturellement, un cours comptera souvent de nombreux étudiants.
Exemple de tableau, conception simple :
Retrouvez tous les étudiants inscrits à un cours :
Retrouvez tous les cours suivis par un élève donné :