我无法绕过SQL查询,试图找出一些东西。
很快,这是我的(简单)表格: 它是社交网站中添加的朋友的代表。 我必须使用这样的表格式,user1和user2都是主键。
User1 | User2
--------------------------------------
foo@a.com | things@stuff.com
foo@a.com | lala@hi.com
things@stuff.com| lol@k.com
lol@k.com | foo@a.com
foo@a.com | lol@k.com
我需要做的是编写一个SELECT语句,该语句将返回与foo@a.com成为朋友的所有唯一用户。
SELECT User2
FROM members
WHERE User1 = 'things@stuff.com'
将返回lol@k.com而不是foo@a.com,即使我需要它返回后者。
SELECT *
FROM members
WHERE User1 = 'foo@a.com'
OR User2 = 'foo@a.com'
我认为会返回错误吗?可能选择多列的东西。
所以我认为联盟加入或其他一些联接是必要的(联合所以没有重复?)但我真的不确定如何去做。
我正在尝试在PHP中实现这一点,所以即使我写的最后一个查询有效,我也不确定如何回复User1或User2,具体取决于它返回的内容/如果有意义的话我需要哪一个。
答案 0 :(得分:2)
使用UNION(表现): -
SELECT User2
FROM members
WHERE User1 = 'foo@a.com'
UNION
SELECT User1
FROM members
WHERE User2 = 'foo@a.com'
答案 1 :(得分:1)
为列
使用alias
名称
SELECT User2 AS friend
FROM members
WHERE User1 = 'things@stuff.com'
UNION
SELECT User1 AS friend
FROM members
WHERE User2 = 'things@stuff.com'
现在你可以回复friend
。
HTH
答案 2 :(得分:0)
这完全取决于您如何定义两个用户之间的关系。
例如,您有一个表项,其中User1 ='foo@a.com'和User2='mumu@f.com'。这是什么意思?这是否意味着用户foo成为mumu的朋友? “友谊”的方向是否重要?
如果答案是否定的,您只想获取用户为foo的所有行,那么您的查询
SELECT *
FROM members
WHERE User1 = 'foo@a.com'
OR User2 = 'foo@a.com'
是对的。
但是,要获取数据,您需要浏览两列结果。