编程好友列表功能

时间:2012-08-01 22:33:27

标签: php mysql codeigniter

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

enter image description here

这是我的数据库结构:

朋友表: enter image description here

用户表: enter image description here

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

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

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

3 个答案:

答案 0 :(得分: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}'))

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

答案 1 :(得分:0)

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

SELECT * FROM users WHERE idusers IN (
   SELECT node2id FROM friends WHERE node1id = $myUserId
)

答案 2 :(得分: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,否则0node1id相互朋友首先出现在结果集中。

您必须考虑的事情是用户可以位于node2id$selectedid列中,因此为了获得一致的连接,我们使用子选择来强制参数的朋友用户ID($myuserid和{{1}})位于同一列中。

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