之前可能已经提出这个问题,我只是不知道搜索它的方法。我认为这应该是基本的,但我无法弄明白。
我有一个朋友表,格式如下:
ID风湿fromid
1 45 50
2 50 45
3 46 45
4 45 46
5 40 45
登录的成员是$member_number
...在这种情况下是“45”。
"toid"
和"fromid"
字段对应于成员ID。如果成员“45”已登录,我将如何编写SELECT查询以获取他们所有成员的所有成员?
为了让他们成为朋友,必须有往复的朋友行。例如,在上文中,成员45和50是朋友,因为他们的朋友记录往返(在行1和2中)。如第3行和第4行所示,45和46也是如此。但是,40和45不是朋友,因为没有往复行。
因此Select语句的结果应该是...... 50,46。
答案 0 :(得分: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
看到一个例子答案 1 :(得分:0)
以下帖子回答了这个问题的答案......同样的问题/问题。 我找到了答案:stackoverflow.com/questions/6259998/ ....