Поиск дубликатов

Тема в разделе "Базы данных", создана пользователем The Finn, 20 ноя 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. The Finn

    The Finn Постоялец

    Регистр.:
    30 авг 2009
    Сообщения:
    80
    Симпатии:
    9
    Сабж: есть 2 базы данных для DLE.
    Цель: слить с обеих баз пользователей в одну.

    Но некоторые аккаунты попадаются в обоих базах и надо от них избавиться, каким образом это сделать ? Юзал поиск, результатов не дал. Сам в MySQL полный дуб. Надеюсь на помощь.
     
  2. Gisma

    Gisma Создатель

    Регистр.:
    9 май 2007
    Сообщения:
    45
    Симпатии:
    9
    Ты можешь работать на уровне дампов :) Т.е. создаешь из двух баз дампы и фигачь что хочешь с ними
    А так если тебя интересуют дубликаты в запросе/таблице то тебе нужен запрос:
    SELECT DISTINCT [fields] FROM [from_table] WHERE [condition]
     
    The Finn нравится это.
  3. The Finn

    The Finn Постоялец

    Регистр.:
    30 авг 2009
    Сообщения:
    80
    Симпатии:
    9
    Gisma, я так понимаю, что сначала нужно залить обе базы, и поставить им разный префикс. И вот тут у меня ступор, надо сравнить эти 2 базы и отсеять дубликаты. Не мог бы ты мне ещё более подробней объяснить (представь, что я младенец, которого впервый раз вывели на прогулку и учат переставлять ножки)?

    В обоих базах интересуют таблицы dle_users и вот с ними нужно проделать операции по извелечению дубликатов и объединению их в одну базу.
     
  4. The Finn

    The Finn Постоялец

    Регистр.:
    30 авг 2009
    Сообщения:
    80
    Симпатии:
    9
    Проблема по-прежнему актуальна
     
  5. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    Сделать уникальным поле email к примеру и тупо залить две базы.
    Там где email уже содержится в базе, база эту запись не добавит.
     
    The Finn нравится это.
  6. MadWizard

    MadWizard Постоялец

    Регистр.:
    24 мар 2009
    Сообщения:
    145
    Симпатии:
    20
    Можно так

    Код:
    INSERT INTO basa3.dle_users (fio, email)
    
    SELECT fio, email
    FROM basa1.dle_users
    
    UNION 
    
    SELECT fio, email
    FROM basa2.dle_users
     
    The Finn нравится это.
  7. SVV_NNNN

    SVV_NNNN Постоялец

    Регистр.:
    10 дек 2007
    Сообщения:
    65
    Симпатии:
    2
    Меня тоже интересует данный вопрос,но дело в том, что когда импортируешь пользователей с одной базы в другую, возникает ошибка "Duplicate entry fo key...", а именно для полей "email, name, user_id". Как можно импортировать пользователей с одной базы в другую, при этом чтбы пользователей с одинаковыми мылом и логином удалило, а с одинаковым йд, просто дописало а не заменяло в той таблице в которую импортируешь???? Если можно напишите пожалуйста порядок действий, что за чем и запросы с помощью которых это все можно выполнить(в PhpMyAdmin или может в какой-то другой проге)!!!! Заранее спасибо!!!! :bc:
     
  8. exGumator

    exGumator Создатель

    Регистр.:
    11 окт 2009
    Сообщения:
    10
    Симпатии:
    3
    Простое решение

    Мускуль может вам дать простое решение. Берем поле логин и пароль - делаем их сочетание уникальным на уровне БД,

    из дампа второго убираем если есть DROP TABLE IF EXISTS, заливаем дамп поверх таблицы имеем однозначно разные пользователь-пароль но, возможны пересечения один логин, чтобы его избежать необходимо УНИКАЛЬНОСТЬ поставить только для поля логин

    У вас теперь должен проснуться вопрос, ЙОПТЬ, А В РАЗНЫХ БАЗАХ НЕТУ ЛИ РАЗНЫХ ПОЛЬЗОВАТЕЛЕЙ С ОДИНАКОВЫМИ ЛОГИНАМИ???, да кстати перед добавлением нужно избавиться в нормальном текстовом редакторе от

    INSERT INTO ... ('id', ... VALUES ('123',... что можно сделать в нотпад++ (в дримваке тормоз по большим файлам)

    - нужно заменить "('id'," на "("
    и регуляркой "VALUES ('[0-9]+'," на "VALUES ("

    либо сделать один дамп из двух соответственно сделав с ними такиеже преобразования
     
    The Finn нравится это.
  9. Javlon Sodikov

    Javlon Sodikov Писатель

    Регистр.:
    18 янв 2010
    Сообщения:
    3
    Симпатии:
    4
    У меня тоже была точно такая проблема.
    Решение:

    <?
    $mysql = mysql_connect('localhost','root','');
    $db1="mysql1from";
    $db2="mysql2to";

    function insData($email,$name,$password,$fullname){
    global $mysql,$db1,$db2;
    $sql = "insert into $db2.dle_users (`email`,`name`,`password`,`fullname`) values ('$email','$name','$password','$fullname')";
    $result = mysql_query($sql);
    return $result;
    }

    function upData($email,$name,$password,$fullname){
    global $mysql,$db1,$db2;
    $sql = "update $db1.dle_users set `email`='$email',`password`='$password',`fullname`='$fullname' where `name`='$name'";
    $result = mysql_query($sql);
    return $result;
    }




    $sql = "select `email`,`name`,`password`,`fullname` from $db1.dle_users";


    $result = mysql_query($sql);
    while($row = mysql_fetch_assoc($result)){
    $email = $row['email'];
    $name = $row['name'];
    $password = $row['password'];
    $fullname = $row['fullname'];

    if (insData($email,$name,$password,$fullname))
    {
    echo $name." inserted<br>";
    }
    else
    {
    echo $name." updated<br>";
    upData($email,$name,$password,$fullname);
    }
    }

    ?>
     
    Karnitsky и The Finn нравится это.
  10. toha

    toha

    Регистр.:
    8 июн 2006
    Сообщения:
    299
    Симпатии:
    26
    Javlon Sodikov,
    это решение чисто под ДЛЕ? или можно использовать более унифицировано?
     
Статус темы:
Закрыта.