好的我有两个表,一个名为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 < strong>正在关注,并且从此列表中有能力关注/取消关注 mike 正在关注的人(其中一些人可能会关注)
感谢任何帮助或指导。
答案 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。此外,由于您正在加入的列,因此只需要其中一个子句。