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

Posted

技术标签:

【中文标题】如何从MySql中删除重复用户但保存原始用户[重复]【英文标题】:How to delete duplicate user from MySql but to save original one [duplicate] 【发布时间】:2016-07-21 00:21:05 【问题描述】:

我有一张这样的桌子: 我想删除“Ognjen”和“Nikola”的所有重复值,只保存这两个值,而不保存它们的重复值。我试过这样:

    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”或“Nikola”了。请帮忙,我被这个卡住了。

【问题讨论】:

检查ID,最高的你删掉你保留的最低的。 查看我刚刚发布的答案 :) 还在检查中..会给你反馈,别担心:) 我还建议不要将 mysql 与 Web 界面一起使用。仅在本地运行以确保安全。我更喜欢debian linux附带的本机mysql。如果您对此感兴趣。 【参考方案1】:

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

“这将删除重复的地方,而不创建新表

ALTER IGNORE TABLE foobar ADD UNIQUE (title, SID)

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

【讨论】:

也许您应该阅读过您借用的答案的一些附带条件***.com/questions/2630440/…【参考方案2】:

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

$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 &lt; 1) 做了一个小改动,它必须是&lt; 而不是&gt;

【讨论】:

不,这不是我真正想要的。必须删除 DESC 部分(是语法错误),它所做的只是从数据库中删除一行。 顺便说一句,如果用户登录到他们网站的仪表板,我会使用此方法,因为我使用的是唯一会话而不是用户名。使登录更容易。但由于用户偶尔会注销,我不想让数据库充满会话。我检查用户之前是否使用相同的 IP 登录过。如果是这样的话。我从数据库中删除旧的。 尝试将其更改为DESC LIMIT 1,大写字母。你知道有多少重复吗? 事实上,我所要做的就是让user_facebook_id 成为唯一的行。简单得可笑。无论如何,谢谢你的努力。 :)

以上是关于如何从MySql中删除重复用户但保存原始用户[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Postgres 数据库中删除用户 [重复]

使用fabric js调整画布大小[重复]

如何让用户保存自定义样式表设置[重复]

如何从restapi中删除mongodb集合[重复]

防止从 ZipOutPutStream 中删除重复项

如何删除没有临时表的 MySQL 表中的所有重复记录