如何检查用户是不是从用户列表中关注另一个用户?

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_id1 在网站上进行搜索时,会显示所有匹配搜索查询的用户,每个用户都有一个按钮,以便u_id1 可以关注他们,但可能有一些用户已经关注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;";

为我工作!!

【讨论】:

以上是关于如何检查用户是不是从用户列表中关注另一个用户?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查用户是不是被禁止?

如何检查用户是不是从“设置”返回

如何检查用户是不是从游戏服务默认视图中退出?

我有一个冲突矩阵,以及具有不同访问权限的用户列表,我想检查该用户是不是为冲突访问权限

检查用户是不是在半径范围内

如何检查该用户是不是已通过来自美味派的身份验证?