Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как удалить дубликаты записей в таблице? 
V
    Опции темы
Coder
Дата 20.8.2007, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: 1
Всего: 11



нужно удалить строки, которые равны по всем поля (кроме id). как это сделать?
PM MAIL   Вверх
Akina
Дата 20.8.2007, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Погоди... если есть 2 одинаковых (кроме ID) записи, надо удалить одну или обе?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
belousov
Дата 20.8.2007, 10:13 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 317
Регистрация: 21.11.2006
Где: Москва

Репутация: нет
Всего: 6



distinct не подойдет?


--------------------
NIHIL VERUM EST LICET OMNIA 
PM MAIL WWW ICQ Skype   Вверх
Coder
Дата 21.8.2007, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: 1
Всего: 11



Akina
поля полностью одинаковы, а ID разные (т.к. записи пришли в разное время) и нужно удалить все кроме одной. повторений может быть не 2, а 8 например.


belousov
не знаю, как его сюда привинтить.

Добавлено через 3 минуты и 14 секунд
Код

row0
id: 1
user_id: 1
data: 3718

row1
id: 2
user_id: 2
data: 1332

row2
id: 3
user_id: 1
data: 3718


это упрощенное представление. нужно удалить row0 или row2.
PM MAIL   Вверх
muzer
Дата 21.8.2007, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 31.8.2006

Репутация: 30
Всего: 31



Если у вас не несколько-десятков-миллионная таблица, и операция единовременная, а не еже_какая-нить, то самый быстрый и простой вариант:
Код

CREATE TABLE new_table LIKE table;
INSERT INTO new_table SELECT id,user_id,data FROM table GROUP BY user_id,data;
RENAME TABLE table TO old_table,new_table TO table;
DROP TABLE old_table;


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

Это сообщение отредактировал(а) muzer - 21.8.2007, 11:04
PM WWW   Вверх
Akina
Дата 21.8.2007, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Coder @  21.8.2007,  02:42 Найти цитируемый пост)
нужно удалить все кроме одной

Кроме КАКОЙ одной? Самой старой? самой свежей? Самой длинной? Пофиг какой? ставь задачу нормально - у нас все телепаты в отпусках.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
muzer
Дата 21.8.2007, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 31.8.2006

Репутация: 30
Всего: 31



Цитата(Akina @  21.8.2007,  16:03 Найти цитируемый пост)
Кроме КАКОЙ одной? Самой старой? самой свежей? Самой длинной? Пофиг какой?

Общий вариант решения от этого никак не зависит вообще-то smile Если решение требует ORDER BY, то найти поле, по которому можно отсортировать не проблема.
PM WWW   Вверх
Coder
Дата 22.8.2007, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: 1
Всего: 11



Цитата(Akina @  21.8.2007,  23:03 Найти цитируемый пост)
Кроме КАКОЙ одной? Самой старой? самой свежей? Самой длинной? Пофиг какой? ставь задачу нормально - у нас все телепаты в отпусках.

Ну да - пофиг...

muzer, +1
PM MAIL   Вверх
fidres
Дата 18.9.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 15.11.2006

Репутация: нет
Всего: 1



а нахря те тогда одни идэшники?
по мне так проще сделать проверку на вводимые данные, чтоб не было повторений.
а базы туда-сюда култырить - тоже как-то не выход, по-моему...
сделай у клиента проверку данных при попытке запостить запрос в базу.
пусть прочекает базу по определённому ключу и при ненахождении оного - постит в базу что угодно.
(хотя, всё равно не возьму в толк нахрена в базе одни идэшники без данных полей?!)
ещё проще можно сделать (хотя это и излишне) проверку, если какую-то часть инфы держать на стороне клиента до поры до времени...
потом, когда уже все данные куска базы будут сложены в один, можно запостить целый блок проверенной и упорядоченной инфы.
правда такой вариант не подходит, если инфа должна оперативно изменятся непосредственно в БД на серваке...
но тоже можно формировать какие-то отдельные, небольшие кусочки инфы и потом уже пытатся отправить их на сервак.
кстати, где-то помнится я здесь видал метод сжатия БД...
вполне возможно, что там применяется что-нибудь похожее...
--------------------
Исправьте ошибку в слове <ХЕРОШО> и я скажу Вам оптимист Вы или пессимист.
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0871 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.