如何从满足指定条件的数据库表中打印无重复记录?
解决重复记录只显示一次的两种方案
方案一:SQL层面直接去重(推荐)
数据库层面处理去重效率更高,根据你的需求分两种情况调整SQL:
1. 整行完全重复时用DISTINCT
直接在查询中添加DISTINCT关键字,数据库会自动返回不重复的记录:
$query = $this->db->query("select DISTINCT * from mytable where status = '1' and cityname= 'abuja' and age= '27' order by id ASC"); foreach ($query->result_array() as $rowx){ echo $rowx['xxx']; }
2. 特定字段重复即视为重复时用GROUP BY
如果只要某个字段(比如xxx)的值不重复,用GROUP BY按该字段分组,确保每个值只返回一条记录:
$query = $this->db->query("select * from mytable where status = '1' and cityname= 'abuja' and age= '27' group by xxx order by id ASC"); foreach ($query->result_array() as $rowx){ echo $rowx['xxx']; }
方案二:PHP层面过滤重复项
如果无法修改SQL,可在PHP中记录已显示的内容,跳过重复项:
$shown_values = []; // 存储已经显示过的xxx字段值 $query = $this->db->query("select * from mytable where status = '1' and cityname= 'abuja' and age= '27' order by id ASC"); foreach ($query->result_array() as $rowx){ $current_val = $rowx['xxx']; // 检查当前值是否已经显示过,没显示过才输出 if (!in_array($current_val, $shown_values)) { echo $current_val; $shown_values[] = $current_val; } }
你之前用break导致迭代终止,是因为break会直接结束整个循环,而上面的方法是跳过重复项,继续处理后续的记录。
内容的提问来源于stack exchange,提问作者Atsa'am
相关产品推荐
相关产品推荐

