【问题标题】:MySQL query for two way relationshipMySQL查询双向关系
【发布时间】:2014-04-06 16:07:54
【问题描述】:

对于一个社交网络应用程序,我需要通过以下方式创建一个 MySQL 表,

id | user_id | friend_id
------------------------
 0 |    5    |   6
 1 |    6    |   5

用户 5 和另一个用户 6 现在是朋友了。如何获取特定用户的朋友列表。有人可以指出我正确的方向吗?

【问题讨论】:

  • SELECT朋友ID WHERE用户ID等于什么?
  • 问题是什么是什么?
  • @shan @iamsleepy 表示SELECT friend_id FROM table_name WHERE user_id = 5
  • 这是完整的表格,还是你有更多的列?>
  • @Mihai:这就是我所得到的,这就是我面临的问题。我写了其他代码,除了获取朋友列表的代码。所以我现在不能改变表结构。

标签: php mysql sql phpmyadmin


【解决方案1】:
SELECT f1.user_id, f2.user_id as 'Friend'
    FROM friends f1 left join friends f2
   on f1.user_id = f2.friend_id 

更多信息请参考这篇帖子What's the difference between INNER JOIN, LEFT JOIN, RIGHT JOIN and FULL JOIN?

【讨论】:

  • 感谢您的回答。如何获取特定用户 ID 的此列表?
  • 在同一个查询中添加 where 条件 - 'where f1.user_id = 5'
【解决方案2】:

如果你为所有用户存储friend_ids,你可以试试这个:

SELECT friend_id FROM TableName WHERE user_id=@userID

从程序中传递参数@userID。

例子:

SELECT friend_id FROM TableName WHERE user_id=5

编辑

对于这两个字段:

SELECT CASE WHEN friend_id=5 THEN user_id 
            WHEN user_id=5 THEN friend_id 
            END AS Friend
 FROM TableName

【讨论】:

  • 这两行是建立完整友谊的必要条件。可能有一个。但我需要查询满足这两行。
  • 是的!我一直在寻找类似的东西。感谢@Raging Bull 启发我
【解决方案3】:

@userid 应该与表中的数据类型相同,否则您需要将其转换为相同的数据类型

select friend_id where user_id=@userid

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    相关资源
    最近更新 更多