SQL关注者和关注者

时间:2013-03-19 09:23:29

标签: php mysql sql

好的我有两个表,一个名为account_members,另一个名为account_follows。我想要一个Twitter风格的跟随系统,其中account_members可以互相跟随。

Account Follows Table Structure:

id
account_name
followed_name
time

Account Members Table Structure:

id
Account_name
status (Account active or not)

我以为我只能通过一个简单的查询来获取所有帐户:

public function following($account_name)
{
    $sql = "SELECT 

    F.id, F.account_name, F.followed_name, F.time, 
    M.account_name AS session_name, M.status 

    FROM account_follows F
    LEFT JOIN account_members M ON F.account_name = M.account_name

    WHERE F.account_name = :account_name 
    AND M.account_name = :account_name

    ORDER BY id DESC LIMIT 5";
}

这将显示正在关注的所有account_members(通过网址设置$account_name

我遇到的问题是允许登录的account_member能够关注或取消关注他们关注的朋友的朋友。我通过执行以下操作,对登录的account_member进行简单检查,以取消关注其列表中的任何人:

if($_SESSION['account_name'] == $row['account_name'])
{
    echo'<a href="" id="..." class="...">Unfollow</a>';
}

以上工作正常,但我想做一些与登录帐户关注者关注者类似的事情......如果这样做有意义吗?

所以 Bob 已登录, Bob 会查看以下列表并点击 mike 并查看 mike 正在关注,并且从此列表中有能力关注/取消关注 mike 正在关注的人(其中一些人可能会关注)

感谢任何帮助或指导。

1 个答案:

答案 0 :(得分:1)

您所拥有的查询将适用于传入的任何成员的帐户名,但查询本身并未考虑当前登录的成员,因此您需要将其数据加入其中。

查询返回url指定帐户所遵循的成员列表。有一点可以告诉登录用户是否也跟随该成员。使用该位来确定是否需要回显跟随或取消关注链接。

SELECT 
        theirFollows.id, theirFollows.account_name, 
        theirFollows.followed_name, theirFollows.time, 
        M.account_name AS member_name, M.status, 
        case 
            when myFollows.followed_name is null then 0
            else 1
        end as sessionMemberIsFollowing
FROM    account_members M
        LEFT JOIN account_follows theirFollows
          ON theirFollows.account_name = M.account_name
        LEFT JOIN 
            (
                select followed_name
                from account_follows 
                where account_name = :session_account_name
            ) myFollows
            on myFollows.followed_name = theirFollows.followed_name

WHERE   M.account_name = :account_name

你的一个选择列是标记的session_name,但这有点误导,因为传入的account_name来自url。此外,由于您正在加入的列,因此只需要其中一个子句。