Voici un exemple SQL simple et rapide. Je ne pense pas qu'il soit nécessaire de confondre ce concept avec php. Récupérez simplement cette collection comme n’importe quelle autre collection.
Dans cet exemple, il existe de nombreux noms et de nombreuses couleurs. Les gens peuvent avoir plusieurs couleurs préférées, et plusieurs personnes peuvent avoir la même couleur préférée. Il s’agit donc d’une relation plusieurs-à-plusieurs.
***** 表 ********** person -------- id - int name - varchar favColor ------------- id - int color - varchar person_color ------------ person_id - int (與person中的id匹配) color_id - int (與favColor中的id匹配) ****** 示例查詢 ****** SELECT name, color FROM person LEFT JOIN person_color ON (person.id=person_id) LEFT JOIN favColor ON (favColor.id=color_id) ****** 示例查詢的結(jié)果 ******* Name - Color --------------- John - Blue John - Red Mary - Yellow Timmy - Yellow Suzie - Green Suzie - Blue 等等...
Est-ce utile ?
Exemple de scénario?: étudiants et cours dans une université. Un étudiant donné peut être inscrit à plusieurs cours, et un cours comptera généralement 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 étudiant spécifique :
SELECT `Course`.* FROM `Course` JOIN `CourseMembership` ON `Course`.`CourseID` = `CourseMembership`.`Course` WHERE `CourseMembership`.`Student` = 5678