首頁  >  問答  >  主體

多對多關係的例子

<p>我在這裡和谷歌上都沒有找到任何MYSQL多對多關係的例子。我想看到一個非常簡單的例子,使用php mysql展示資料庫的結果。有人能寫一個很簡單的例子嗎? </p>
P粉785905797P粉785905797399 天前643

全部回覆(2)我來回復

  • P粉763662390

    P粉7636623902023-08-19 09:13:10

    這是一個快速而簡單的SQL範例。我認為沒有必要用php來混淆這個概念。只需像處理其他集合一樣檢索這個集合。

    在這個範例中,有很多名字和很多顏色。人們可以有多個喜歡的顏色,而且很多人可以有相同的喜歡的顏色。因此是多對多關係。

    ***** 表 **********
    
    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)
    
    
    ****** 示例查询的结果 *******
    
    Name - Color
    ---------------
    John - Blue
    John - Red
    Mary - Yellow
    Timmy - Yellow
    Suzie - Green
    Suzie - Blue
    等等...

    這有幫助嗎?

    回覆
    0
  • P粉827121558

    P粉8271215582023-08-19 00:58:42

    範例場景:大學的學生和課程。一個給定的學生可能參加多門課程,而一門課程通常會有很多學生。

    範例表,簡單設計:

    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

    找出註冊了某門課程的所有學生:

    SELECT
        `Student`.*
    FROM
        `Student`
        JOIN `CourseMembership` ON `Student`.`StudentID` = `CourseMembership`.`Student`
    WHERE
        `CourseMembership`.`Course` = 1234

    找出某個特定學生參加的所有課程:

    SELECT
        `Course`.*
    FROM
        `Course`
        JOIN `CourseMembership` ON `Course`.`CourseID` = `CourseMembership`.`Course`
    WHERE
        `CourseMembership`.`Student` = 5678

    回覆
    0
  • 取消回覆