我還沒有在這裏和谷歌中找到任何MYSQL多對多關係示例。我在看的是看到一個非常簡單的例子,用php + mysql顯示數據庫的結果。任何人都可以寫一個非常簡單的例子嗎?多對多關係示例
Q
多對多關係示例
23
A
回答
54
示例場景:學生和大學課程。一個給定的學生可能會參加幾門課程,而自然一門課程通常會有很多學生。
例表,簡單的設計:
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
7
這裏有一個涉及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...
這有幫助嗎?
0
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')
+5
請給你的答案的解釋 – 2012-10-08 21:13:24
3
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)
相關問題
- 1. 多對多關係基本示例(MVC3)
- 2. GAE一對多關係JDO示例
- 3. MongoDB - 多對多關係(特例)
- 4. 多對多關係中的查詢示例
- 5. 用於多對多關係的C#ORM示例
- 6. 多對多關係
- 7. 多對多關係
- 8. 多對多關係
- 9. 多對多關係
- 10. 多對多關係
- 11. 多對多關係
- 12. 多對多關係
- 13. 多對多關係
- 14. 顯示PHP多對多的關係
- 15. 多對多的關係顯示
- 16. 顯示多對多關係的視圖
- 17. Octobercms:多對多關係沒有顯示
- 18. Count()對多對多關係
- 19. 多對多多態關係
- 20. SqlAlchemy關係多對多與其他多對多關係
- 21. 關係有多對多關係
- 22. 多對多關係和關係模型
- 23. 通過一對多關係檢索多對多關係
- 24. 變換多對多關係一對多關係
- 25. 多對多關係與一對多關係有什麼區別?
- 26. jpa一對多關係無法例外
- 27. 一對多與多對多的關係
- 28. 多對多分組關係
- 29. Laravel多對多關係
- 30. DAO。多對多關係
看到這個:http://www.tonymarston.net/php-mysql/many-to-many.html – nc3b 2010-05-27 18:37:57