如何在没有SELECT每个id的情况下获取相关项目

时间:2011-06-06 23:39:25

标签: mysql sql database database-design

我必须为朋友网络进行数据库设计。 当我将某人添加为某人朋友时,我实际上将他们的uniqueID添加到包含两列的表中。

| USER 1 | USER 2 |

所以,当我想知道什么是朋友时,我在这张桌子上做一个寻找ID的选择。

但问题是,当我想要显示朋友列表时,我必须搜索他的所有朋友,并在查找每个ID以查找详细信息之后。 它看起来不对。

有更有效的方法吗?我可以设计我的数据库吗? 我们有什么地方可以了解有关数据库设计的更多信息吗?

2 个答案:

答案 0 :(得分:1)

你的设计对我来说似乎很好。然而,查看JOINs将帮助您摆脱嵌套查询以获取用户的信息。 JOIN将允许您在一个查询中获取有关两个用户的所有信息,然后您可以循环并打印列表。

查询可能会变成:

SELECT 
     u.name 
FROM 
     friends f 
     JOIN users s ON (u.id = f.user_id_2) 
WHERE 
     f.user_id_2 = 1234

答案 1 :(得分:1)

考虑到你上面所说的话,我认为你走的正确。多对多关联表是您所描述内容的规范方式。听起来问题可能在您的查询中 - 您说您必须进行多次查找。你应该可以写这样的东西

SELECT * FROM People p1
         INNER JOIN Friends f on p1.id = f.id1 and p2.id = f.id2
         INNER JOIN People p2 on p2.id = f.id2
       WHERE p1.id = 6123