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

Форум MySQL

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

 

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

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

тема: Удалить дубликаты записей.
 
 автор: Alexx   (21.06.2007 в 13:07)   письмо автору
 
 

Нужно удалить дубликаты записей одинаковых по нескольким колонкам. Как это сделать?


Или можно сделать такой вариант. У записей в таблице products есть поле page с id страницы, которой принадлежит товар. Поэтому надо проверить есть ли такая страница с id в таблице pages и если страницы нет то надо удалить этот товар. Как такой запрос написать?

   
 
 автор: Alexx   (22.06.2007 в 10:15)   письмо автору
 
   для: Alexx   (21.06.2007 в 13:07)
 

ап

   
 
 автор: cheops   (22.06.2007 в 11:24)   письмо автору
 
   для: Alexx   (21.06.2007 в 13:07)
 

Самый простой вариант - это извлечь уникальные записи, либо используя ключевое слово DISTINCT, либо группировку по полю при помощи конструкции GROUP BY, и использовать данный SQL-запрос для формирования новой таблицы используя оператор CREATE TABLE ... SELECT ... Затем уничтожить старую таблицу, а новой присвоить новое значение.

   
 
 автор: Alexx   (22.06.2007 в 11:36)   письмо автору
 
   для: cheops   (22.06.2007 в 11:24)
 

А можно пример?

   
 
 автор: cheops   (23.06.2007 в 10:37)   письмо автору
 
   для: Alexx   (22.06.2007 в 11:36)
 

Приведите структуру (получить можно при помощи оператора CREATE TABLE) вашей таблицы и от дубликатов в каких столбцах вы хотите избавиться?

   
 
 автор: Osipov   (24.06.2007 в 14:25)   письмо автору
 
   для: Alexx   (22.06.2007 в 11:36)
 

Получите SHOW CREATE TABLE tab, где tab ---имя таблицы, переправьте в результате tab на tab2 и
создайте таблицу, не забыв добавить в ней поле UNIQUE(<поля, которые должны быть уникальными>)

Потом выполняйте
INSERT INTO tab2 (<перечистите все поля>) SELECT <тоже перечислите все поля в том же порядке> FROM tab GROUP BY <перечислите поля, корорые нужно сделать уникальными>;

(если вы, как я написал, добавили UNIQUE при создании таблицы, то скорее всего GROUP BY <...> можно не писать, а написать INSERT IGNORE ... помоему так)

(всё без угловых скобок, поля перечисляются черех запятую)

Теперь tab2 содержит то, что вам нужно.

А можно ещё попробовать ALTER TABLE tab ADD UNIQUE(<поля, которые должны быть уникальными>), но я не уверен, что сработает (возможно, чтобы сработало, нужно какой-нибудь ключ добавить). Потом это UNIQUE можно удалить, если больше не нужно.

Да, и это если вам нужно сделать один раз, потому, что оба способа --- долгие.

   
 
 автор: Trianon   (24.06.2007 в 02:45)   письмо автору
 
   для: Alexx   (21.06.2007 в 13:07)
 

Ответ на вопрос 2.
Запрос, который удаляет продукты, не имеющие страниц:

DELETE products 
  FROM products 
    LEFT JOIN pages ON products.page=pages.id
  WHERE pages.id IS NULL 

   
Rambler's Top100
вверх

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