MySQL查询我所有(已接受)朋友的列表

时间:2013-01-21 07:51:36

标签: mysql sql

我有一个像这样的MySQL表:

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

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

有没有1个查询方式可以做到这一点?

2 个答案:

答案 0 :(得分:3)

请试试这个:

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

SQLFIDDLE DEMO

| 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 |

答案 1 :(得分: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 Fiddle Demo

这会给你:

| ID |
------
|  2 |
| 16 |