如何检查用户是不是从用户列表中关注另一个用户?
Posted
技术标签:
【中文标题】如何检查用户是不是从用户列表中关注另一个用户?【英文标题】:How to check if a user follows another user from a list of users?如何检查用户是否从用户列表中关注另一个用户? 【发布时间】:2015-11-03 17:44:20 【问题描述】:我正在用 php 创建一个关注系统,用户可以在其中关注/取消关注其他用户。到目前为止,当一个用户关注任何其他用户时,两个用户的 id 都存储在 mysql 数据库的 'follow' 表中,
u_id | f_id
===========
1 | 2
1 | 3
1 | 5
u_id
跟在f_id
后面
现在u_id
1 在网站上进行搜索时,会显示所有匹配搜索查询的用户,每个用户都有一个按钮,以便u_id
1 可以关注他们,但可能有一些用户已经关注by u_id
1. 我如何实现那些已经被u_id
1 关注的用户没有那个关注按钮?
一种方法是在显示搜索结果之前检查每个结果是否后跟u_id
1,但我想这会很慢。
有什么方法可以让我在单个 MYSQL 查询中做到这一点?
【问题讨论】:
select u_id from [users] where u_id not in (select f_id from follow where u_id = <current_users_id>
【参考方案1】:
当 u_id = 1 在网站上进行搜索时,所有匹配搜索查询的用户都会出现
看起来您有某种查询返回 user_id
和建议的用户 f_id
关注。假设这是一个表suggestion
SELECT s.f_id,
CASE
WHEN f.id IS NULL THEN 'ON'
ELSE 'OFF'
END as ButtonStatus
FROM [suggestion] s
LEFT JOIN [follow] f
ON s.user_id = f.u_id
AND s.f_id = f.f_id
WHERE
s.user_id = @user_id // Variable from your UI.
【讨论】:
【参考方案2】:$sql = "SELECT u.*, f.followingUsersId AS followingUsersId
FROM users AS u LEFT JOIN (SELECT followingUsersId FROM follow WHERE followerUsersId = '".$_SESSION['userid']."') AS f ON u.usersId = f.followingUsersId
WHERE u.usersName LIKE '%$searchvalue%' ORDER BY f.followingUsersId DESC, u.usersId DESC;";
为我工作!!
【讨论】:
以上是关于如何检查用户是不是从用户列表中关注另一个用户?的主要内容,如果未能解决你的问题,请参考以下文章