2011-08-09 72 views
0

相关的表,我有以下情况:如何组织数据库中的

table User (id, name) 
table Belonging (id, name, color) 
table UserBelonging (id, user_id, belonging_id) 

现在,UserBelonging是我加入连接User和他Belonging表。

的问题出现时,我想拉出来的一定User全部家当,是红色。

我看到两种方法可以做到这一点:

  1. 获取所有UserBelonging某个用户,然后依次通过他们,并检查它们是红色
  2. 将一个额外的列这样的:UserBelonging (id, user_id, belonging_id, color),然后在查询同一张桌子。

这两种方法似乎丑陋给我。有没有人有数据库表的经验,可以告诉我哪种方式更好,为什么或可能给我一个更好的解决方案?

感谢

回答

1

连接表应包含user_idbelonging_id,具有(user_id, belonging_id)任一的复合ID或自动增量id柱。

这排除了#2。现在


,你可以使用的策略#1,或者你可以在select声明过滤掉非红色物品。

SELECT b.id, b.name, b.color 
FROM UserBelonging ub 
LEFT JOIN Belonging b 
ON ub.belonging_id = b.id 
WHERE ub.user_id = 123456789 
AND b.color = 'red' 
0

您可以很容易地使用1 JOIN和一个WHERE语句与您的颜色条件和user_id。在讨论关系数据库时,联接是最常见的操作之一。 查询W3schools了解一些基本示例。

+0

请不要使用W3Schools的作为参考,HTTP: //w3fools.com/ – anderssonola

1
SELECT B.* FROM User U 
INNER JOIN UserBelonging UB on UB.UserId=U.Id 
INNER JOIN Belonging B on B.Id = UB.BelongingId 
Where B.Color = 'red' AND U.Name='Sam' 

我觉得像这样的连接会做你想要的。

0

这是一般最好不要使用循环数据库中。在SQL Server中我会做这样的(但我不知道这是否适用于你的DB)

Select User.Name, Belonging.name, Belonging.color from User inner join UserBelonging 
    on User.id =  UserBelonging.user_id inner join Belonging 
    on UserBelonging.belonging_id = Belonging.id 
    where Belonging.color = 'red' and User.name = 'put the name here' 

问候