如何正确查询我的朋友 table 与 MySQL 的多对多关系?

How to correctly query my friend table with its many to many relationship with MySQL?

我正在构建一个使用 MySQL 作为数据库的简单应用程序。我有一个用户 table,其信息各不相同,但我也有一个朋友 table。每个用户都有自己的 ID,在发起请求时会在好友 table 中引用。

我的朋友table很简单:

id              int       NO    PRI                 auto_increment
date            datetime  NO    CURRENT_TIMESTAMP   DEFAULT_GENERATED
user_one_id     int       NO            
user_two_id     int       NO            
request_status  tinyint   NO    

我的问题是在尝试查询我的 table 以查找特定用户的朋友时。我在下面的查询中的两个子查询都可以自己正常工作,但是当我将它们包含在主查询中时,我没有得到任何结果。没有错误,但也没有结果。

如果登录用户的ID是1,那么-

SELECT id, display_name, join_date, profile_image_url 
FROM user WHERE id IN
    (SELECT user_one_id FROM friend WHERE user_two_id = 1 AND request_status = 1) 
AND id IN 
    (SELECT user_two_id FROM friend WHERE user_one_id = 1 AND request_status = 1);

查询应该考虑用户 ID 在任一列中的情况,具体取决于好友请求的实际发起人。

如果这看起来像是一个愚蠢的问题,我深表歉意,但我们都需要学习。

如果有任何其他信息有帮助,请告诉我。

我相信如果您使用 OR 而不是 AND 作为 WHERE 子句中的条件,您的代码将有效,但我提出了一个更简单的解决方案 EXISTS:

SELECT u.id, u.display_name, u.join_date, u.profile_image_url 
FROM user u
WHERE EXISTS (
  SELECT * 
  FROM friend f 
  WHERE f.request_status = 1
    AND (f.user_one_id, f.user_two_id) IN ((u.id, ?), (?, u.id))
);

? 替换为您要搜索的用户的 ID。