关联查询带WHERE子句无法获取记录:仅需展示登录用户数据
如何筛选当前登录用户的帖子记录
看起来你需要在现有查询基础上,加上条件只返回当前登录用户的帖子,其实核心就是利用Session保存的登录用户ID,给查询加个WHERE子句过滤数据就行。
步骤1:确保登录时已存储用户ID到Session
首先得确认用户登录成功后,你已经把他的ID存入了Session,比如登录验证逻辑里应该有类似这样的代码:
// 假设从users表查到登录用户的ID为$user_id $this->session->set_userdata('user_id', $user_id);
要是你的Session键名不是user_id,后面记得对应调整哦。
步骤2:修改get_posts方法添加筛选条件
把你原来的方法改成下面这样,补充WHERE子句限定当前用户的帖子:
public function get_posts(){ // 从Session获取当前登录用户的ID $current_user_id = $this->session->userdata('user_id'); $this->db->order_by('posts.id', 'DESC'); // 补全categories表的关联语句,这里假设关联字段是categories.id和posts.category_id $this->db->join('categories', 'categories.id = posts.category_id'); // 关键:添加条件,只查询当前用户发布的帖子 $this->db->where('posts.user_id', $current_user_id); // 返回最终查询结果 return $this->db->get('posts')->result(); }
关键说明
$this->session->userdata('user_id')是获取登录用户ID的核心,一定要和你登录时存入Session的键名保持一致。$this->db->where('posts.user_id', $current_user_id)这条语句就是把查询范围锁定在当前用户的帖子上,因为posts表的user_id字段和users表的ID字段关联,刚好对应登录用户的ID。
这样修改后,你的查询就只会返回当前登录用户自己的帖子啦!
内容的提问来源于stack exchange,提问作者Harun Anwar
相关产品推荐
相关产品推荐

