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

seoman2

Lotus team
17.02.2010
458
1
#1
В общем есть задача - удалить дубли записей в доске объявлений по признаку - совпадение 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 ?
 

acorn

PHP Developer
29.08.2004
585
3
#2
можно сразу:
<!--shcode--><pre><code class='sql'>"DELETE FROM `jos_adsmanager_ads` WHERE `id`!='{$id}' AND `ad_text` = '{$text}' AND `ad_headline` = '{$head}'[/CODE]

а так вроде код похож на правильный.
 

seoman2

Lotus team
17.02.2010
458
1
#3
Вопрос в чем, вот в моём примере есть дубли 2331, 2207 на запись 3811.
в массиве $sql мы попав на запись 3811 удалили дубли 2331, 2207
а потом попадет ли указатель в массиве на запись 2331 и не удалит ли запись 3811 ?
 

seoman2

Lotus team
17.02.2010
458
1
#5
Вот решение проблемы:
Код:
$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}'");