1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

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

  1. seoman2

    seoman2 Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    17 фев 2010
    Сообщения:
    452
    Симпатии:
    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 ?
     
  2. acorn

    acorn PHP Developer

    Репутация:
    0
    Регистрация:
    29 авг 2004
    Сообщения:
    585
    Симпатии:
    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 Well-Known Member
    Lotus team

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

    acorn PHP Developer

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

    seoman2 Well-Known Member
    Lotus team

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

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