Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Удаление дубликатов из таблицы БД
 
 автор: kran   (04.11.2005 в 20:57)   письмо автору
 
 

Здравствуйте!

Есть база данных MySQL, в ней есть таблица порядка 300000 объектов.
Как можно удалить дубликаты объектов в данной таблице?

Спасибо!

   
 
 автор: Football   (05.11.2005 в 09:59)   письмо автору
 
   для: kran   (04.11.2005 в 20:57)
 

Под дубликатом подразумевается удаление, где сходиться что-то одно (например одна строка) или где всё сходиться?
Если где одна сходиться, то легко эт осделать через массив, правда долго получиться.

$povtor=array(); // массив повторов
$zapros=mysql_query("Select * From table"); // запрос
if (!$zapros) {
echo mysql_error();
die()
}

// теперь проверяем все строки
while ($table=mysql_fetch_array($zapros)) {
   $count_povtor=count($povtor);  // считаем кол-во элементов повтора
   for ($i=0;$i<$count_povtor;$i++) { // цикл просмотра всех повторов
      if ($table['kakoeto_pole']==$povtor[$i]) { // если совпадает с одним из повторов то удаляем
      $delete=mysql_query("DELETE FROM table WHERE kakoeto_pole='$povtor[$i]' ;");
      } else { // а иначе
      array_unshift($povtor,$table['kakoeto_pole']; // добавлеям, что такое уже было
      }
   }
}

Всё, в этом коде замени table на свою таблицу, а kakoeto_pole, поле, по которому следует удалять повторяющих.
PS. Код сам не запускал, так что может быть он не рабочий
PS2. Если надо удалять обсолютно похожие по всем параметрам строки, то можно просто добавит ещё несколько повторяющихся массивов.

   
 
 автор: cheops   (05.11.2005 в 10:42)   письмо автору
 
   для: kran   (04.11.2005 в 20:57)
 

Если эту операцию необходимо сделать только один раз - обычно создают новую таблицу с уникальными значениями, старую таблицу удаляют и заменяют её новой.

   
 
 автор: kran   (06.11.2005 в 00:32)   письмо автору
 
   для: cheops   (05.11.2005 в 10:42)
 

2all
Да, именно нужно удалить все дубликаты в таблице.

Под дубликатом понимаются объекты таблицы строки которых полностью сходятся.

Сам объект представляет из себя одно слово.

Так вообщем нужно убрать все повторяющиеся слова.

Написал простой скриптик:
определяем кол-во объектов в таблице, циклом извлекаем значение объекта по id и сравниваем с другими значениями в таблице, если значения совпадают то их удаляем.

Вообщем запустил я весь алгоритм и тихо присел в кресло, поняв что ждать результата мне минимум сутки(а может и не одни)!

Естественно я эту порнографию выключил и стал думать дальше, а так как ничего умного мне в голову не пришло решил озадачить этим вас :-))

---------------------------------
2Cheops

Несовсем понятно, т.е. нужно создать такую же таблицу только с уникальным ключом в поле в котором находятся нужные нам значения, а потом через скрипт с помощью INSERT INTO перезаписать данные из одной таблицы в другую и ... , или как ...?

...НАВЕРНОЕ НАДО БОЛЬШЕ СПАТЬ!!!

   
 
 автор: cheops   (06.11.2005 в 00:59)   письмо автору
 
   для: kran   (06.11.2005 в 00:32)
 

Да. Причём получить новую таблицу из старой можно при помощи оператора
SELECT * FROM tbl GROUP BY name

где name - столбец с нужной вам строкой.

   
 
 автор: kran   (06.11.2005 в 01:05)   письмо автору
 
   для: cheops   (06.11.2005 в 00:59)
 

И что, MySQL при этом сама удалит все дубликаты?

   
 
 автор: cheops   (06.11.2005 в 01:46)   письмо автору
 
   для: kran   (06.11.2005 в 01:05)
 

Нет сама не удалит, требуется создать новую таблицу при помощи оператора CREATE TABLE ... SELECT * FROM tbl GROUP BY name, а старую удалить.

   
 
 автор: kran   (06.11.2005 в 22:45)   письмо автору
 
   для: cheops   (06.11.2005 в 01:46)
 

Всем спасибо! И особенно Cheops! Разобрался :-))

Всем кому интересно, делается это следующим образом:
1. Создаем новую таблицу с идентичными полями и типами.
2. И создаем следующий запрос к БД:

"INSERT INTO tbl_2 SELECT * FROM tbl_1 GROUP BY name";

, где
name - столбец в котором нужно удалить дубликаты.
tbl_1 - изначальная таблица с дубликатами.
tbl_2 - новая, такая хорошенькая и чистенькая табличка :-)))

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования