如何通过SQL查询获取当前用户及关注用户的发布内容
解决方案:查询自身及关注用户的发布内容
原SQL语句仅筛选了当前用户自己发布的内容,未关联关注用户的发布数据,以下是两种可行的修正方案:
方案一:使用IN子查询(逻辑直观)
通过子查询先获取当前用户所有关注对象的邮箱,再筛选出这些对象和当前用户自己发布的内容:
SELECT b.text FROM tableB AS b WHERE b.user = 'currentuser' OR b.user IN ( -- 子查询:获取当前用户关注的所有用户邮箱 SELECT following FROM tableC WHERE follower = 'currentuser' ) -- 建议添加排序,按发布时间倒序展示最新内容,需替换为实际时间字段名 ORDER BY b.publish_time DESC;
方案二:使用JOIN关联查询
通过关联tableB和tableC,直接匹配关注关系对应的发布内容:
-- 加DISTINCT避免用户关注自己时出现重复内容 SELECT DISTINCT b.text FROM tableB AS b LEFT JOIN tableC AS c ON b.user = c.following WHERE b.user = 'currentuser' OR c.follower = 'currentuser' ORDER BY b.publish_time DESC;
扩展优化:显示作者信息
如果需要同时展示内容发布者的名字,可以关联tableA获取用户名称:
SELECT b.text, a.name AS author_name, b.publish_time FROM tableB AS b JOIN tableA AS a ON b.user = a.email WHERE b.user = 'currentuser' OR b.user IN ( SELECT following FROM tableC WHERE follower = 'currentuser' ) ORDER BY b.publish_time DESC;
注意事项
- 将
'currentuser'替换为PHP中当前登录用户的邮箱变量(例如$_SESSION['user_email']),注意做好SQL防注入处理(建议使用预处理语句) - 如果
tableB没有时间字段,可根据实际需求调整排序逻辑
内容的提问来源于stack exchange,提问作者Posvengers Prevengers
相关产品推荐
相关产品推荐

