用mysql group分组去除重复数据小编还是头一次,以前都是使用distinct来过滤了,今天我们来介绍另一种另类的处理方法.
GROUP分组去除重复数据
- /**
- * 清除同一专题中重复导入的数据
- * @author tanteng
- * @date 2014.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']; //开源软件:Vevb.com
- }
- $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
新闻热点
疑难解答