Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用关系表查找所有好友_Php_Mysql_Sql - Fatal编程技术网

Php 使用关系表查找所有好友

Php 使用关系表查找所有好友,php,mysql,sql,Php,Mysql,Sql,有了所有的工具和CMS,创建应用程序对我来说总是很容易的。这是我第一次在没有任何ORM的情况下使用高级SQL,所以我不知道如何得到我想要的结果 我正在尝试建立一个用户朋友系统。基本上,一个用户可以添加另一个用户作为朋友,朋友用户可以接受。我有两个表Users和Users\u关系。Users表具有明显的用户信息,user_Relationships表具有Relationship_setter(请求者用户id)、Relationship_getter(请求的用户id)和active 问题是我需要在页

有了所有的工具和CMS,创建应用程序对我来说总是很容易的。这是我第一次在没有任何ORM的情况下使用高级SQL,所以我不知道如何得到我想要的结果

我正在尝试建立一个用户朋友系统。基本上,一个用户可以添加另一个用户作为朋友,朋友用户可以接受。我有两个表Users和Users\u关系。Users表具有明显的用户信息,user_Relationships表具有Relationship_setter(请求者用户id)、Relationship_getter(请求的用户id)和active

问题是我需要在页面上显示所有好友(活动或非活动)。我知道下面的查询是错误的,但这就是我所想到的:

$sql = "SELECT *
        FROM users_relationships
        LEFT JOIN users
        ON users_relationships.relation_setter = users.user_id
        WHERE users_relationships.relation_getter = " . $logged_in_id.
      " OR users_relationships.relation_setter = " . $logged_in_id;
我需要的是关系表中的所有用户,作为$logged\u-in\u用户的setter或getter。简单地说,我需要所有与我是朋友的人,不管是谁添加了他们,我还是他们,根据我为每行获得的“活动”值,它将打印“请求挂起”或不打印


上面的查询给我带来了非常复杂的结果,其中有许多重复的结果,而请求挂起也是错误的。

JOIN
table
Users
再一次像这样:

SELECT 
  us.UserName AS SetterName,
  ug.UserName AS GetteerName,
  ur.Active AS Status,
  ...
FROM users_relationships ur
LEFT JOIN users us ON ur.relation_setter = us.user_id
LEFT JOIN users ug ON ur.relation_getter = ug.user_id 
WHERE $logged_in_id IN(ur.relation_getter, ur.relation_setter);


更新1 要将好友列表作为一个列表而不是两个用户名,可以执行以下操作:

SELECT 
  us.UserName AS FriendName,
  ur.Active AS Status
FROM 
(
  SELECT relation_setter user_id, active 
  FROM users_relationships
  WHERE relation_getter = $logged_in_id 
  UNION  
  SELECT relation_getter, active 
  FROM users_relationships
  WHERE relation_setter = $logged_in_id 
) AS ur
LEFT JOIN users us ON ur.user_id = us.user_id;

这将为您提供已登录用户的好友列表


更新2 此查询如何工作?

登录使用的列表是
关系设置器
关系设置器
。因此,为了在一列中获得这两个,我使用两个查询来获得它们中的每一个,一个用于
relationship\u setter

  SELECT relation_setter user_id, active 
  FROM users_relationships
  WHERE relation_getter = $logged_in_id 
  SELECT relation_getter, active 
  FROM users_relationships
  WHERE relation_setter = $logged_in_id 
另一个用于
关系\u getter

  SELECT relation_setter user_id, active 
  FROM users_relationships
  WHERE relation_getter = $logged_in_id 
  SELECT relation_getter, active 
  FROM users_relationships
  WHERE relation_setter = $logged_in_id 
然后我使用将它们作为一个结果集:

  SELECT relation_setter user_id, active 
  FROM users_relationships
  WHERE relation_getter = $logged_in_id 
  UNION  
  SELECT relation_getter, active 
  FROM users_relationships
  WHERE relation_setter = $logged_in_id 
此查询将把两个查询中的所有数据仅分为两个字段
user\u id
active

注意:

  • UNION
    隐式选择不同的行,它将消除重复行,但
    UNION ALL
    将保留这些重复行

  • 两个联合结果集将具有在第一次选择中指定的列名称;在我们的查询中,第二个select的第一列名为
    relationship\u getter
    ,来自该列的值将位于
    userid
    下,因为它是在第一个查询中定义的


然后,我将这两个联合查询包含在一个子查询中,并将其与
Users
表连接起来,我们完成了:)

非常感谢您的回答。在本例中,我们得到了两个用户名,因为我们两次加入表。对的这就是为什么它包括两次登录的用户和一些重复的用户。我怎样才能像普通的社交网络一样交到朋友?再次感谢,非常感谢。我不明白,但我最终还是会明白的。先生,你救了我这么多的悲痛。在你的帮助下,我解决了应用程序中的两个问题。非常感谢。@Aayush-随时欢迎你:)我编辑了我的答案,希望现在有意义:)