2014-03-05 11 views
0

我在我的DB两个表:如何保存一个国家被分配到哪个组?

countries (id, name) 
groups (group_id, name, countries) 

如果我得到了美国,加拿大,德国和荷兰的国家,并希望他们这样的组群:

USA, Canada = North America 
Germany, Holland = Europe 
USA, Canada, Germnay, Holland = The World 

如何能够而且将会我保存在我的数据库? 如何将同一个国家保存在多个组中? 如果每个国家只有一个组,那么只需在国家中添加group_id即可。

由于提前, 的Mikael

+2

请结合表像group_countries持有的GROUP_ID和COUNTRY_ID所以会有不同的组标识为同一个国家ID多个条目 –

+0

谢谢!有时你不会再想那么长的绳子。 – MSvelander

回答

0

示例数据库设计:

CREATE TABLE Countries 
    (`id` INT auto_increment primary key , `name` varchar(30)) 
; 

INSERT INTO Countries 
    (`name`) 
VALUES 
('Germany'),('USA'),('Holland'),('Canada') 

; 

CREATE TABLE Groups_Countries 
(`id` INT auto_increment primary key , Countries_ID int, Groups_id int) 
; 

INSERT INTO Groups_Countries 
    (Countries_id,Groups_id) 
VALUES 
(2,1),(4,1),(1,2),(3,2),(1,3),(2,3),(3,3),(4,3)  
; 



CREATE TABLE Groups 
(`id` INT auto_increment primary key , `name` varchar(30)) 
; 

INSERT INTO Groups 
    (`name`) 
VALUES 
('North America'),('Europe'),('The World') 
; 

SQL查询

SELECT c.name FROM Countries c 
JOIN Groups_Countries gc 
ON c.ID = gc.countries_ID 
JOIN Groups g 
ON g.id = gc.Groups_ID 
WHERE g.name = 'North America'; 

SELECT c.name FROM Countries c 
JOIN Groups_Countries gc 
ON c.ID = gc.countries_ID 
JOIN Groups g 
ON g.id = gc.Groups_ID 
WHERE g.name = 'Europe'; 

SELECT c.name FROM Countries c 
JOIN Groups_Countries gc 
ON c.ID = gc.countries_ID 
JOIN Groups g 
ON g.id = gc.Groups_ID 
WHERE g.name = 'The World'; 

SQLFiddle demo

0

这是一个多对多的关系。在关系数据库中,这是通过关联表,其中有(至少)表示两列 -

country_groups (country_id, group_id) 

然后,当它涉及到进行查询,你将包括联接在这个表带上,例如对所有国家北美:

SELECT c.name FROM countries c 
    INNER JOIN country_groups cg ON cg.country_id = c.id 
    INNER JOIN groups g ON cg.group_id = g.group_id 
    WHERE g.name = 'North America' 
相关问题