這是一個(gè)快速而簡(jiǎn)單的SQL示例。我認(rèn)為沒(méi)有必要用php來(lái)混淆這個(gè)概念。只需像處理其他集合一樣檢索這個(gè)集合。
在這個(gè)示例中,有很多名字和很多顏色。人們可以有多個(gè)喜歡的顏色,而且很多人可以有相同的喜歡的顏色。因此是多對(duì)多關(guān)系。
***** 表 ********** 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 等等...
這有幫助嗎?
示例場(chǎng)景:大學(xué)的學(xué)生和課程。一個(gè)給定的學(xué)生可能參加多門(mén)課程,而一門(mén)課程通常會(huì)有很多學(xué)生。
示例表,簡(jiǎn)單設(shè)計(jì):
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
查找注冊(cè)了某門(mén)課程的所有學(xué)生:
SELECT `Student`.* FROM `Student` JOIN `CourseMembership` ON `Student`.`StudentID` = `CourseMembership`.`Student` WHERE `CourseMembership`.`Course` = 1234
查找某個(gè)特定學(xué)生參加的所有課程:
SELECT `Course`.* FROM `Course` JOIN `CourseMembership` ON `Course`.`CourseID` = `CourseMembership`.`Course` WHERE `CourseMembership`.`Student` = 5678