首页 > 数据库 > MySQL > 正文

MYSQL中GROUP分组去除重复数据

2024-07-24 12:39:29
字体:
来源:转载
供稿:网友

用mysql group分组去除重复数据小编还是头一次,以前都是使用distinct来过滤了,今天我们来介绍另一种另类的处理方法.

GROUP分组去除重复数据

  1. /** 
  2.  * 清除同一专题中重复导入的数据 
  3.  * @author tanteng 
  4.  * @date 2014.07.27 
  5.  */ 
  6. public function fuck_repeat(){ 
  7.  set_time_limit(0); 
  8.  $sql = "SELECT `id` FROM `v95_special_content` GROUP BY `specialid`,`curl` HAVING COUNT(`curl`)>1 "
  9.  $result = $this->db->query($sql); 
  10.  while ($r = mysql_fetch_assoc($result)) { 
  11.   $ids[] = $r['id']; //开源软件:Vevb.com 
  12.  } 
  13.  $ids = implode(","$ids); 
  14.  if (!$ids) { 
  15.   showmessage('没有重复数据!',HTTP_REFERER);exit
  16.  } 
  17.  $sql2 = "DELETE from `v95_special_content` where `id` in($ids) "
  18.  $this->db->query($sql2); 
  19.  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这个关键字来过滤掉多余的重复记录只保留一条.

  1. table 
  2. id name 
  3. 1 a 
  4. 2 b 
  5. 3 c 
  6. 4 c 
  7. 5 b 
  8. select distinct name from table 
  9. //得到的结果是: 
  10. name 

好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧.

  1. select *, count(distinct name) from table group by name 
  2. //结果: 
  3. id name count(distinct name) 
  4. 1 a 1 
  5. 2 b 1 
  6. 3 c 1

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表