我有一张这样的桌子: 我想删除' 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;了。请帮助,我坚持这个。
答案 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)
做了一些小改动,而不是<