1

我想首先指出我还不太擅长高级 MySQL。所以请原谅我。我想要做的是创建一个朋友列表,如下图所示:

在此处输入图像描述

这是我的数据库结构:

好友表: 在此处输入图像描述

用户表: 在此处输入图像描述

到目前为止,这是我的代码:

<?php  $query3 = $this->db->query("SELECT * FROM friends WHERE node1id = '{$myuserid}'");
        foreach($query3->result() as $row1) {
        echo $row1->node1id."<br>"; } ?>

我知道这段代码在逻辑上不正确。我想要做的是拉入用户表。如果relationType = 朋友,则在朋友列表中显示用户的名字和姓氏。我有两个变量。$selectedId 和 $myuserid。$selectedId 是用户正在查看的配置文件的 ID。$myuserid 是登录用户的 id。我将如何在逻辑上对这种类型的功能进行编码?

4

3 回答 3

1
SELECT username FROM users 
WHERE userid IN 
    (SELECT node2id FROM friends WHERE node1id = '{$myuserid}' 
    AND relationType = 'friends')

echo $row1->username

对于共同的朋友,你可以这样做

编辑:刚刚意识到这个的最后一个版本是不正确的,现在修复(未经测试)

SELECT username FROM users 
WHERE userid IN 
    (SELECT node2id FROM (
        (SELECT node2id FROM friends WHERE relationType = 'friends' AND node1id <> '{$myuserid}' AND node1id IN
            (SELECT node2id FROM friends WHERE relationType = 'friends' AND node1id = '{$myuserid}'))) 
         WHERE node2id IN (SELECT node2id FROM friends WHERE relationType = 'friends' AND node1id = '{$myuserid}'))

这首先选择朋友,然后选择与自己不相等(不等于<>)的那些朋友的朋友。然后它只从该列表中选择与您自己的朋友 ID 匹配的朋友 ID。然后它从用户表中选择这些用户的名称。

于 2012-08-01T22:40:25.040 回答
0

您可以在下面的选择中进行选择:

SELECT * FROM users WHERE idusers IN (
   SELECT node2id FROM friends WHERE node1id = $myUserId
)
于 2012-08-01T22:41:27.790 回答
0

以下是如何获取特定用户的所有朋友 ( $selectedid),并确定他们的每个朋友是否是共同的朋友:

SELECT    b.*, 
          c.myfrnd IS NOT NULL AS isMutual
FROM      (
          SELECT IF(node2id = '$selectedid', node1id, node2id) AS usrfrnd
          FROM   friends
          WHERE  '$selectedid' IN (node1id,node2id) AND
                 relationType = 'friends'
          ) a
JOIN      users b ON a.usrfrnd = b.userid
LEFT JOIN (
          SELECT IF(node2id = '$myuserid', node1id, node2id) AS myfrnd
          FROM   friends
          WHERE  '$myuserid' IN (node1id,node2id) AND
                 relationType = 'friends'
          ) c ON b.userid = c.myfrnd
ORDER BY  isMutual DESC

该列isMutual将包含1朋友是否是共同的朋友,否则将包含0。共同的朋友首先出现在结果集中。

您必须考虑的是用户可能在列node1idnode2id中,因此为了获得一致的联接,我们使用子选择来强制参数 userids ($selectedid$myuserid) 的朋友在同一列中。

让我知道这是如何工作的。

于 2012-08-01T22:58:42.413 回答