Çok-çok ilişkileri örnekler

2 Cevap php

Ben herhangi bir MYSQL çok-çok ilişkileri örnekler burada ve google bulamadı. Ne arıyorum veritabanının sonuçlarını gösteren php + mysql ile çok basit bir örnek görmek için. Herkes çok basit bir örnek yazabilir miyim?

2 Cevap

Örnek senaryo: Bir üniversitede öğrenciler ve dersleri. Belirli bir öğrenci çeşitli derslerle ilgili olabilir, ve doğal bir ders genellikle birçok öğrencimiz olacak.

Örnek tablolar, basit bir tasarım:

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

Bir ders için kayıtlı tüm öğrencilere bul:

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

Belirli bir öğrenci tarafından alınan tüm dersleri bulabilirsiniz:

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

Burada yer alan SQL hızlı ve kirli bir örnek. Ben php ile kavramını çamurlu için herhangi bir ihtiyaç görmüyorum. Sadece başka olacak gibi kümesi almak.

Bu örnekte, birçok isim ve birçok renk vardır. İnsanlar birden fazla favori rengi için izin verilir, ve birçok kişi aynı favori renk olabilir. Bu nedenle birçok çok.


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

Bu yardımcı olur mu?