|
|
|
| Здравствуйте!
Есть база данных MySQL, в ней есть таблица порядка 300000 объектов.
Как можно удалить дубликаты объектов в данной таблице?
Спасибо! | |
|
|
|
|
|
|
|
для: 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. Если надо удалять обсолютно похожие по всем параметрам строки, то можно просто добавит ещё несколько повторяющихся массивов. | |
|
|
|
|
|
|
|
для: kran
(04.11.2005 в 20:57)
| | Если эту операцию необходимо сделать только один раз - обычно создают новую таблицу с уникальными значениями, старую таблицу удаляют и заменяют её новой. | |
|
|
|
|
|
|
|
для: cheops
(05.11.2005 в 10:42)
| | 2all
Да, именно нужно удалить все дубликаты в таблице.
Под дубликатом понимаются объекты таблицы строки которых полностью сходятся.
Сам объект представляет из себя одно слово.
Так вообщем нужно убрать все повторяющиеся слова.
Написал простой скриптик:
определяем кол-во объектов в таблице, циклом извлекаем значение объекта по id и сравниваем с другими значениями в таблице, если значения совпадают то их удаляем.
Вообщем запустил я весь алгоритм и тихо присел в кресло, поняв что ждать результата мне минимум сутки(а может и не одни)!
Естественно я эту порнографию выключил и стал думать дальше, а так как ничего умного мне в голову не пришло решил озадачить этим вас :-))
---------------------------------
2Cheops
Несовсем понятно, т.е. нужно создать такую же таблицу только с уникальным ключом в поле в котором находятся нужные нам значения, а потом через скрипт с помощью INSERT INTO перезаписать данные из одной таблицы в другую и ... , или как ...?
...НАВЕРНОЕ НАДО БОЛЬШЕ СПАТЬ!!! | |
|
|
|
|
|
|
|
для: kran
(06.11.2005 в 00:32)
| | Да. Причём получить новую таблицу из старой можно при помощи оператора
SELECT * FROM tbl GROUP BY name
|
где name - столбец с нужной вам строкой. | |
|
|
|
|
|
|
|
для: cheops
(06.11.2005 в 00:59)
| | И что, MySQL при этом сама удалит все дубликаты? | |
|
|
|
|
|
|
|
для: kran
(06.11.2005 в 01:05)
| | Нет сама не удалит, требуется создать новую таблицу при помощи оператора CREATE TABLE ... SELECT * FROM tbl GROUP BY name, а старую удалить. | |
|
|
|
|
|
|
|
для: 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 - новая, такая хорошенькая и чистенькая табличка :-))) | |
|
|
|