对不起,忘记说一点了,我的mysql数据表的信息,只有一点不一样,就是每条的id不一样,请问我该怎么删除重复的记录,谢谢

解决方案 »

  1.   

    select distinct * into #Tmp from tableName
         drop table tableName
         select * into tableName from #Tmp
         drop table #Tmp
      

  2.   

    pchome:应该是用 distinct 这个参数来过滤重复的信息吧 
    用insert和select 结合的方式把相异的记录插入一个新表中 
    在删除旧表就可以了
      

  3.   

    最原始的方法:
    遍历所有的记录,依次比较第i和第i+1条(除了id)所有的字段,如果全相等就del it.
    再难点的,叫楼上的高手给你回答吧,
      

  4.   

    $result=mysql_query("select id,key1,key2 from table");//key1,key2不让相同的字段名称
    $array=array();
    while($arr=mysql_fetch_array($result)){
          $tmpArr=array_unique($arr);
          array_shift($tmpArr);
          if(in_array($tmpArr,$array)){
             mysql_query("delete from table where id=".$arr[id]);     
          }else{
             $array[]=$tmpArr;    
          }
    }
      

  5.   

    有的,我是在phpmyadmin中使用的---不过一开始不知道为什么不能用,后来
    进入phpMyAdmin 2.2.6然后就可以了
      

  6.   

    OPTIMIZE TABLE tbl_name如果你删除了一个表的大部分或如果你用变长的行对一个表(有VARCHAR、BLOB或TEXT列的表)做了改变,应该使用OPTIMZE TABLE。删除的记录以一个链接表维持并且随后的INSERT操作再次使用老记录的位置。你可以使用OPTIMIZE TABLE回收闲置的空间。 OPTIMIZE TABLE通过制作原来的表的一个临时副本来工作。老的表子被拷贝到新表中(没有闲置的行),然后原来的表被删除并且重命名一个新的。这样做使得所有更新自动转向新的表,没有任何失败的更新。当时OPTIMIZE TABLE正在执行时,原来的表可被另外的客户读取。对表的更新和写入延迟到新表是准备好为止。 
      

  7.   

    临时表可行,问题是你的主机不见得支持最老实的办法:对表中的每个纪录,逐个与以前所有的纪录比较,发现有与当前纪录相同的,就删除当前纪录全删除完后,可以用 OPTIMIZE TABLE tbl_name 优化
    (OPTIMIZE 只能帮助你优化,不能帮助你完成去掉重复纪录的功能)
      

  8.   

    我的代码不就是删除key1,key2....重复的记录吗!上面各位能否有点新意?!
    能否用sql语句来实现?
      

  9.   

    用临时表的话
    关键是你如何生成临时表并且同时能够删除那些关键字key1,key2段重复?谁能写出sql语句,就算成功!各位不能只会说而不会写
      

  10.   

    array_unique();
    array_shift();
    in_array();谁能解释下这几个函数的意思,最近小弟经常看见别人用数组方面的函数,但都看不懂,谁能指点下在那有这方面的文章可以看看,谢谢!
      

  11.   

    array_unique($arr)返回数组中独一无二的值的数组
    array_shift($arr)将数组第一个元素踢出去
    in_array($var,$array);判断$var是否为$array的一个元素,$var可以为数组
      

  12.   

    回楼上各位:
    谢谢指教optimize的用法---试验中
    楼主的问题用临时表是比较好的解决方法
    新建一个临时表
    create table tmp as select * from youtable group by name
    删除原来的表
    drop table youtable
    重命名表
    alter table tmp rename youtable(mysql4.0.2版本以上支持!!!!!)其中的name也就是重复的字段
      

  13.   

    to 版主:
    本来以为你的group by有问题,结果竟然是正确的。因为sqlserver里面group by必须有聚合函数配合,mysql竟然没有这个限制。
    不过你创建临时表错误,因为那不叫临时表,只是一个中间表而已。完整的sql语句:
    create table tmp as select * from tableName group by key1,key2
    alter table tmp rename youtable(我的mysql3.23就支持)