1

我有一个这样的 MySQL 表:

| USER | FRIEND |
-----------------
|    1 |      2 |
|    2 |      1 |
|    1 |     16 |
|   16 |      1 |
|    1 |      4 |

我需要编写一个 MySQL 查询来列出 的所有(接受的)朋友user 1,在这种情况下,它应该返回2and 16,但不是4,因为不接受这种友谊。

有没有 1-query 方法可以做到这一点?

4

2 回答 2

3

请试试这个:

select * from table1 a
join table1 b
on a.user = b.friend
and b.user = a.friend
;

SQLFIDDLE 演示

| USER | FRIEND |
-----------------
|    2 |      1 |
|    1 |      2 |
|   16 |      1 |
|    1 |     16 |

您可以通过更改查询并提供所需的确切用户来简化获取朋友或用户的过程:

select A.FRIEND from table1 a
join table1 b
on a.user = b.friend
and b.user = a.friend
WHERE A.USER = 1
;

| FRIEND |
----------
|      2 |
|     16 |
于 2013-01-21T08:02:27.323 回答
1

我需要编写一个 MySQL 查询来列出用户 1 的所有(已接受)朋友

假设一个接受的油炸食品是一个朋友,在表中有两个条目,一个从用户到朋友,另一个从朋友到用户(正如您在问题中使用示例数据解释的那样),那么您可以这样做:

SELECT ID
FROM
(
      SELECT user AS ID FROM friends WHERE friend = 1
      UNION ALL 
      SELECT friend     FROM friends WHERE user = 1
) t 
GROUP BY ID
HAVING COUNT(ID) > 1;

SQL 小提琴演示

这会给你:

| ID |
------
|  2 |
| 16 |
于 2013-01-21T07:59:37.740 回答