MySQL查询需求:排除指定匹配值及之前的所有数据
解决方案
核心思路是先定位到你要排除的目标name对应的id,然后只查询id小于该目标id的记录(因为你用ORDER BY id desc排序,id越小的在结果里越靠后,也就是你要保留的"之后的数据")。
方法一:分步查询(逻辑更清晰)
先获取目标name对应的id,再用这个id作为过滤条件:
// 替换这里的值为你需要排除的指定name $target_name = 'reseller3'; // 获取目标name对应的id $target_id = $this->db->select('id')->where('name', $target_name)->get('level_list')->row()->id; // 查询目标id之后的所有记录 $query2 = $this->db->where('id <', $target_id)->order_by('id', 'desc')->get('level_list'); // 输出结果 foreach($query2->result() as $user_data) { echo $user_data->real_name."<br/>"; }
方法二:子查询一步完成
直接在SQL里用子查询获取目标id,简化代码结构:
// 替换这里的值为你需要排除的指定name $target_name = 'reseller3'; $sql = "SELECT * FROM level_list WHERE id < (SELECT id FROM level_list WHERE name = ?) ORDER BY id desc"; $query2 = $this->db->query($sql, array($target_name)); // 输出结果 foreach($query2->result() as $user_data) { echo $user_data->real_name."<br/>"; }
这两种方式都能精准实现你的需求:指定reseller3时输出reseller2,reseller1,指定reseller2时输出reseller1。
内容的提问来源于stack exchange,提问作者Osman Gani
相关产品推荐
相关产品推荐

