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

Форум MySQL

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

 

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

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

тема: Удаление одинаковых записей
 
 автор: Snorri   (09.06.2006 в 14:35)   письмо автору
 
 

Здравствуте.
Подскажите как удалить из таблицы одинаковые записи.
Может есть встроенная функция?
Извиняюсь за такой вопрос, но совершенно нет времени искать в справочниках.
И еще, у меня автоинкрементное поле ID так вот после удаления записей остаются дыры в индексах(может мне показалось?) можно это как-то поправить, сдвинуть чтобы дыр не было.
Заранее благодарен.

   
 
 автор: Loki   (09.06.2006 в 14:45)   письмо автору
 
   для: Snorri   (09.06.2006 в 14:35)
 

удалить автоинкрементный столбец и создать его заново. Только зачем это?

   
 
 автор: Snorri   (09.06.2006 в 15:11)   письмо автору
 
   для: Loki   (09.06.2006 в 14:45)
 

А как удалить одинаковые записи?
Точнее, чтобы из набора одинаковых записей осталась только одна?

   
 
 автор: cheops   (09.06.2006 в 16:54)   письмо автору
 
   для: Snorri   (09.06.2006 в 15:11)
 

Создать новую таблицу при помощи запроса
CREATE TABLE new_tbl SELECT * FROM tbl GROUP BY field

Где field - поле, которое должно стать уникальным. После этого необходимо удалить таблицу tbl
DROP TABLE tbl

А новую таблицу переименовать в tbl
ALTER TABLE new_tbl RENAME TO tbl

   
 
 автор: elenaki   (09.06.2006 в 16:58)   письмо автору
 
   для: cheops   (09.06.2006 в 16:54)
 

а можно поподробне, что при этом произойдет? какие записи удалятся, какие останутся?
допустим, есть запись с id=187 и каким-то именем в поле name и есть с id=3877 и таким же
именем. какая запись останется? с меньшим id? а если мне, например, нужно в каких-то
случаях сохранить более позднюю запись? или MySQL будет при каждом совпадении останавливаться?

   
 
 автор: cheops   (09.06.2006 в 17:01)   письмо автору
 
   для: elenaki   (09.06.2006 в 16:58)
 

Останется случайная запись (заранее с вами соглашусь - действительно не удобно :)))

   
 
 автор: elenaki   (09.06.2006 в 17:06)   письмо автору
 
   для: cheops   (09.06.2006 в 17:01)
 

A EC/\u TAK:

1. взяли строку/поле из старой таблицы
2. записали во временную таблицу
3. взяли следующую строку/поле из старой таблицы
4. сравнили со строками/полями во временной таблице
5. если не найдено совпадений, переходим на п.2
6. если найдено совпадение, переходим на п.3

вот только боюсь, долго это будет. записей - около 90 тыс.

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

   
 
 автор: Trianon   (09.06.2006 в 17:07)   письмо автору
 
   для: cheops   (09.06.2006 в 17:01)
 

между прочим, на большинстве db-платформ, отличных от MySQL, конструкция Group by, порождающая неопределенку (т.е. не снабженная соответствующими агрегатными функциями в разделе select ) просто запрещена.
Даже DISTINCT, который все клянут за неоптимальность, всяко предпочтительней.

   
Rambler's Top100
вверх

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