Удаление Дублей Записей.

  • Автор темы Автор темы seoman2
  • Дата начала Дата начала

seoman2

Green Team
17.02.2010
507
1
BIT
72
В общем есть задача - удалить дубли записей в доске объявлений по признаку - совпадение 2 полей - заголовок и содержание.
как я сделал:
Код:
 $sql = mysql_query("SELECT * FROM `jos_adsmanager_ads` WHERE `ad_price` != '' AND `ad_phone` != ''");
...
while ($row = mysql_fetch_array($sql)) 
$id = $row[0];
$head = $row[8]; // загловок
$text = $row[9]; // содержание
...
// ищем дубли и помещаем их в $result
$result = mysql_query("SELECT * FROM `jos_adsmanager_ads` WHERE `id`!='{$id}' AND `ad_text` = '{$text}' AND `ad_headline` = '{$head}');
$num_r = mysql_num_rows($result);  //кол-во дублей
if ($num_r >0){
while ($row2 = mysql_fetch_array($result)) {
$id2 = $row2[0]; // ид дубля
// проблема
}

Вот в чем проблема: к примеру есть запись 3811 и её дубли 2331, 2207.
так вот при переборе всех значений с $sql я не знаю как пометить или удалить только дубли, чтобы не стереть оригинал.
пробовал ставить дополнительное поле flag - чтобы в нем помечать дубли, неполучилось, и ли как то удалять дубли из $sql ?
 
можно сразу:
<!--shcode--><pre><code class='sql'>"DELETE FROM `jos_adsmanager_ads` WHERE `id`!='{$id}' AND `ad_text` = '{$text}' AND `ad_headline` = '{$head}'[/CODE]

а так вроде код похож на правильный.
 
Вопрос в чем, вот в моём примере есть дубли 2331, 2207 на запись 3811.
в массиве $sql мы попав на запись 3811 удалили дубли 2331, 2207
а потом попадет ли указатель в массиве на запись 2331 и не удалит ли запись 3811 ?
 
Вот решение проблемы:
Код:
$sql = mysql_query("SELECT * FROM `jos_adsmanager_ads` WHERE `ad_headline` != '' AND `ad_text` != '' AND `ad_price` != '' AND `ad_phone` != '' ORDER BY `id` ASC");
$result = mysql_query("SELECT * FROM `jos_adsmanager_ads` WHERE `id`>'{$id}' AND `ad_text` = '{$text}' AND `ad_headline` = '{$head}'");
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!