0

这可能以前被问过,我只是不知道如何搜索它。我认为这应该是基本的,但我无法弄清楚。

我有一个格式如下的朋友表:

id toid fromid
1 45 50
2 50 45
3 46 45
4 45 46
5 40 45

登录的成员是$member_number......在这种情况下是“45”。

和字段对应于成员 ID "toid""fromid"如果成员“45”已登录,我将如何编写一个 SELECT 查询来获取与他们成为朋友的所有成员?

为了让他们成为朋友,必须有互惠的朋友行。例如,在上面,成员 45 和 50 是朋友,因为他们是往来的朋友(在第 1 行和第 2 行中)。45 和 46 也是如此,如第 3 行和第 4 行所示。但是,40 和 45 不是朋友,因为没有往复行。

所以 Select 语句的结果应该是... 50, 46。

4

1 回答 1

3

你可以使用两个选择的联合,像这样

select fromid from <table> where toid = $member_number
union
select toid from <table> where fromid = $member_number

union具有过滤掉重复项的额外好处,因此在您的示例中 50 不会出现两次。

确保 toid 和 fromid 都被索引(单独或作为另一个索引的最左边部分),并且此查询将快速进行。

此外,不需要 id 列(在我看来),您在 toid 和 fromid 上放置了一个主键,这足以识别该表中的任何行。

可以在SQLFiddle看到一个示例

于 2013-01-03T17:14:15.410 回答