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

Тема в разделе "PHP программирование", создана пользователем seoman2, 27 фев 2012.

  1. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    В общем есть задача - удалить дубли записей в доске объявлений по признаку - совпадение 2 полей - заголовок и содержание.
    как я сделал:
    Код (Text):
     $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 ?
     
  2. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    можно сразу:
    <!--shcode--><pre><code class='sql'>"DELETE FROM `jos_adsmanager_ads` WHERE `id`!='{$id}' AND `ad_text` = '{$text}' AND `ad_headline` = '{$head}'[/CODE]

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

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Вопрос в чем, вот в моём примере есть дубли 2331, 2207 на запись 3811.
    в массиве $sql мы попав на запись 3811 удалили дубли 2331, 2207
    а потом попадет ли указатель в массиве на запись 2331 и не удалит ли запись 3811 ?
     
  4. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    ну так делайте селект после каждой итерации, что-нибудь типа
    <!--shcode--><pre><code class='sql'>SELECT * FROM table limit current_no, 1[/CODE]
     
  5. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Вот решение проблемы:
    Код (Text):
    $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}'");
     
Загрузка...

Поделиться этой страницей