Объединенный Открытый Проект - Сайт для Настоящих Компьютерщиков

Объединенный Открытый Проект

Сайт для Настоящих Компьютерщиков

; Логин:
  Пароль:
Обычный
Безопасный
Запомнить пользователя



Зарегистрироваться
Забыли пароль?
 
 
 
Объединенный Открытый Проект »   Базы данных »   Удаление одинаковых записей из таблицы
RSS

Удаление одинаковых записей из таблицы

Текущий рейтинг темы: Нет

<<Назад  Вперед>>Модератор: wsxПечать
 
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
Вот довольно нетривиальная задача, с которой я столкнулся. Есть база данных (причем довольно большая), в которой из-за ошибки скрипта появилось несколько сотен полностью одинаковых записей. Естественно, это является весьма неприятным явлением и возникает вопрос: как удалить лишние одинаковые записи так, чтобы осталась только одна из них?

---
Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
wsx
Модератор раздела
Юниксойд, сетевик
wsx
Откуда: Казань
Всего сообщений: 1074
Рейтинг пользователя: 28

Репутация пользователя: 1




Дата регистрации на форуме:
14 янв. 2005
Я думаю, со счётчиком разберёшься, малость модифицируешь скрипт и всё будет ок :)))!

<?php

//connecting, selecting database....


$SQL = mysql_query("SELECT id, name, pools....,Nn FROM mytable WHERE name = 'Говоришь всё одинаково ?' AND pools ='Тут тоже всё одинакого?'") or die("Error: ".mysql_error());


while($a_row = mysql_fetch_array($SQL))
{
$SQL = "DELETE FROM mytable WHERE id=$a_row['id']";

mysql_query($SQL) or die("Erorr: ".mysql_error());
}


?>
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
Зашибись, однако. Но это - не то, что я хотел бы сделать. Дело в том, что таких вот одинаковых запией - более чем достаточно.
Я нашел более простое решение:

CREATE TABLE Topics2 SELECT DISTINCT * FROM Topics ORDER BY t_id


А далее надо удалить таблицу Topics, а Topics2 переименовать в Topics.

---
Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
wsx
Модератор раздела
Юниксойд, сетевик
wsx
Откуда: Казань
Всего сообщений: 1074
Рейтинг пользователя: 28

Репутация пользователя: 1




Дата регистрации на форуме:
14 янв. 2005
ГЫы :)) Можно и так.! Но мы же не ищем лёгких путей :))
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 2994
Рейтинг пользователя: 79





Дата регистрации на форуме:
29 сен. 2001
Как выяснилось, такой способ подходит только для таблиц без AUTO_INCREMENT.
Для таблиц с AUTO_INCREMENT приходится поступать следующим образом:
создавать таблицу (временную) tmp из одного поля id, тип которого совпадает с типом AUTO_INCREMENT (в данном примере также называемого id), и выполнить запрос вида
INSERT INTO tmp SELECT MIN(id) FROM table1 GROUP BY любое_другое_поле
Далее надо выполнить следующий запрос:
CREATE TABLE table2 SELECT t.* FROM table1 t, tmp WHERE t.id=tmp.id
А после этого переименовать table2 в table1.

---
Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
<<Назад  Вперед>>Модератор: wsxПечать
Объединенный Открытый Проект »   Базы данных »   Удаление одинаковых записей из таблицы
RSS
Быстрый переход в раздел:


Время выполнения скрипта: 0.0498. Количество выполненных запросов: 18, время выполнения запросов 0.0175