Esempi di relazioni molti-a-molti

Non ho trovato esempi di relazioni molti-a-molti di MySQL qui e in google. Quello che sto cercando è di vedere un esempio molto semplice con php + mysql che mostra i risultati del database. Qualcuno può scrivere un esempio molto semplice?

Scenario di esempio: studenti e corsi universitari. Un dato studente potrebbe essere su diversi corsi, e naturalmente un corso di solito ha molti studenti.

Tabelle di esempio, design semplice:

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 

Trova tutti gli studenti iscritti per un corso:

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

Trova tutti i corsi seguiti da un determinato studente:

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

Ecco un esempio rapido e sporco dell'SQL coinvolto. Non vedo alcun bisogno di infangare il concetto con php. Recupera il set come faresti con qualsiasi altro.

In questo esempio, ci sono molti nomi e molti colors. Le persone possono avere più di un colore preferito e molte persone possono avere lo stesso colore preferito. Quindi molti a molti.

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

Questo aiuta?

 mysql> SELECT * FROm products; +----+-----------+------------+ | id | name | company_id | +----+-----------+------------+ | 1 | grechka | 1 | | 2 | rus | 1 | | 3 | makaronu | 2 | | 4 | yachna | 3 | | 5 | svuniacha | 3 | | 6 | manka | 4 | +----+-----------+------------+ 6 rows in set (0.00 sec) mysql> SELECT * FROm company; +----+----------+ | id | name | +----+----------+ | 1 | LVIV | | 2 | KIEV | | 3 | KHarkiv | | 4 | MADRID | | 5 | MaLIN | | 6 | KOROSTEN | +----+----------+ 6 rows in set (0.00 sec) mysql> SELECT * FROm many_many; +------------+---------+ | product_id | city_id | +------------+---------+ | 1 | 1 | | 1 | 3 | | 2 | 3 | | 1 | 2 | | 1 | 4 | | 2 | 4 | | 2 | 1 | | 3 | 1 | +------------+---------+ 8 rows in set (0.00 sec) mysql> SELECT products.name,company.name FROM products JOIN many_many ON many_ ny.product_id =products.id JOIN company ON company.id= many_many.city_id; +----------+---------+ | name | name | +----------+---------+ | grechka | LVIV | | grechka | KHarkiv | | grechka | KIEV | | grechka | MADRID | | rus | KHarkiv | | rus | MADRID | | rus | LVIV | | makaronu | LVIV | +----------+---------+ 8 rows in set (0.00 sec) 
 SELECT a.a_id, b.b_id, b.b_desc, CASE WHEN x.b_id IS NULL THEN 'F' ELSE 'T' END AS selected FROM a CROSS JOIN b LEFT JOIN x ON (x.a_id = a.a_id AND x.b_id = b.b_id) WHERE (a.a_id = 'whatever')