0

我无法将头绕在 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 取决于它返回的/如果有意义的话我需要哪个。

4

3 回答 3

2

使用 UNION (用于性能):-

SELECT User2
FROM members
WHERE User1 = 'foo@a.com'
UNION
SELECT User1
FROM members
WHERE User2 = 'foo@a.com'
于 2013-05-14T09:06:52.387 回答
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

高温高压

于 2013-05-14T09:08:24.733 回答
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'

是正确的。

但是,要获取数据,您需要浏览两列以获得结果。

于 2013-05-14T09:07:00.387 回答