Heim  >  Fragen und Antworten  >  Hauptteil

Beispiel einer Beziehung, an der mehrere Entitäten beteiligt sind

<p>Ich habe weder hier noch in Google Beispiele für MYSQL-Viele-zu-Viele-Beziehungen gefunden. Was ich suche, ist ein sehr einfaches Beispiel, in dem PHP+MySQL Ergebnisse aus einer Datenbank anzeigt. Kann jemand ein ganz einfaches Beispiel schreiben? </p>
P粉327903045P粉327903045419 Tage vor461

Antworte allen(2)Ich werde antworten

  • P粉288069045

    P粉2880690452023-08-28 18:15:19

    这是所涉及的 SQL 的一个简单而粗略的示例。我认为没有必要用 php 来混淆这个概念。只需像检索其他集合一样检索该集合即可。

    在此示例中,有许多名称和许多颜色。人们可以有不止一种喜欢的颜色,而且很多人可以有相同的喜欢的颜色。因此是多对多。

    ***** 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...

    这有帮助吗?

    Antwort
    0
  • P粉007288593

    P粉0072885932023-08-28 15:27:40

    示例场景:大学的学生和课程。某个学生可能会参加多门课程,自然而然,一门课程通常会有很多学生。

    示例表,简单设计:

    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

    Antwort
    0
  • StornierenAntwort