GROUP分组去除重复数据
/**
* 清除同一专题中重复导入的数据
* @author tanteng
* @date .07.27
*/
public function fuck_repeat(){
set_time_limit(0);
$sql = "SELECT `id` FROM `v95_special_content` GROUP BY `specialid`,`curl` HAVING COUNT(`curl`)>1 ";
$result = $this->db->query($sql);
while ($r = mysql_fetch_assoc($result)) {
$ids[] = $r['id'];
}
$ids = implode(",", $ids);
if (!$ids) {
showmessage('没有重复数据!',HTTP_REFERER);exit;
}
$sql2 = "DELETE from `v95_special_content` where `id` in($ids) ";
$this->db->query($sql2);
showmessage('执行成功,删除了'.$this->db->affected_rows().'条重复数据!',HTTP_REFERER);
}
我们分析一下这条sql语句:
SELECT `id` FROM `v95_special_content` GROUP BY `specialid`,`curl` HAVING COUNT(`curl`)>1
这里根据两个字段进行了分组,分别是specialid和curl,就是说这两个字段同时相同的作为条件查询,having是group语句的条件,相当于where,后面就是计算这样的条数。
利用mysql的group分组就实现了去除数据库中多个字段相同的重复数据的操作。
补充:当然还可以使用distinct这个关键字来过滤掉多余的重复记录只保留一条
table
id name
1 a
2 b
3 c
4 c
5 b
select distinct name from table
得到的结果是:
name
a
b
c
好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧
select *, count(distinct name) from table group by name
结果:
id name count(distinct name)
1 a 1
2 b 1
3 c 1