如何从MySql中删除重复的用户,但保存原始用户

时间:2016-04-01 09:04:07

标签: php mysql

我有一张这样的桌子: enter image description here 我想删除' Ognjen'的所有重复值。和尼古拉'并且只保存那两个,没有重复。我试过这样:

    public function findDuplicate($tabela){
        $query = "SELECT `user_facebook_id` FROM $tabela GROUP BY `user_facebook_id` HAVING count(*) > 1";
        $rez = $this->db->query($query, 3);
        if($rez){
            return $rez;
        }else{
            return false;
        }
    }
$duplicateResult=$settings->findDuplicate($tabela);
if($duplicateResult){
    echo '<div class="alert alert-warning">
  <strong>Warning!</strong> We can see that some of users you inserted already exists in database, so we are authorized to delete them.
</div>
';
    foreach($duplicateResult as $result){
        $to=$result['user_facebook_id'];
        $mysqli1 = new mysqli('localhost','servis_user','QrbRJQK7r52nFpx2','servis_racunara');
        $q="DELETE FROM $tabela WHERE `user_facebook_id`=$to";
        $rez=$mysqli->query($q);
        var_dump($rez);
    }
}

但所有这一切都是为了删除我桌子上的所有内容。所以没有'Ognjen&#39;也不是尼古拉&#39;了。请帮助,我坚持这个。

2 个答案:

答案 0 :(得分:0)

感谢user187291; 参考:How to delete duplicates on a MySQL table?

“这会删除重复的内容,而不会创建新表

ALTER IGNORE TABLE foobar ADD UNIQUE (title, SID)

注意:只有当索引适合内存时才能正常工作“

答案 1 :(得分:0)

这样的事情应该这样做,让我知道它是否适合你

$result = mysqli_query($mysqli, "SELECT * from $tabela where user_facebook_id = '&to' and pol = '$pol' ");
$row_cnt = mysqli_num_rows($result);

if($row_cnt < 1) { 
    // do nothing 
} else {
    mysqli_query($mysqli, "DELETE FROM $tabela WHERE user_facebook_id = '$to' DESC LIMIT 1");
}

解释这段代码: 它将搜索user_facebook_id和pol($ pol你需要自己定义,不确定你是否已经拥有)如果它找到多个它将执行最后一个查询,它将删除它找到的最后一个结果。如果它找不到超过1,它什么都不做。

编辑:我对if($row_cnt < 1)做了一些小改动,而不是<