как убрать из базы повторяющися имена

Статус
В этой теме нельзя размещать новые ответы.

red_heads

Знаток
Регистрация
30 Янв 2007
Сообщения
175
Реакции
28
В базе встречаются повторяющиеся имена
т.е.
GSM антенна Adactus ADA-0056
GSM антенна Adactus ADA-0056

при этом у какой то записи есть описание и картинка у другой пустые значения, либо у обоих записей нету ни описания ни картинки (т.к. для этого товара не готова описания)
как мне удалить из базы все повторяющиеся значения при этом оставив если есть, те у которых описания и картинка, либо просто оставив ту запись у которой идентификатор старше, если вообще нет описания у товара
 
два варианта:
1) не чистить базу. для вывода НЕповторяющихся использовать запрос вида

Код:
select [B]distinct[/B] name, kartinka, opisalovo from tovari where opisalovo<>'' and kartinka<>''

ключевое слово distinct позволяет выбрать из базы уникальные (неповторяющиеся) значения.

2) результаты запроса из пункта 1 сохранить в таблицу tmp_table, грохнуть оригинальную таблицу, затем переименовать tmp_table в первоначальное имя. Можно поместить в крон и выполнять сию операцию 1-2 раза в неделю.
 
ну так у меня описание есть не во всех дублированных товарах
а этот запрос уберает если есть в одном из дубликатов описание , так?
Код:
select distinct name, kartinka, opisalovo from tovari where opisalovo<>'' and kartinka<>''
есть товары без описания дублированные , с ними что делать?

т.е.
товар 1
GSM антенна Adactus ADA-0059 описания
GSM антенна Adactus ADA-0059 нет описания

товар 2
GSM антенна Adactus ADA-0056 нет описания
GSM антенна Adactus ADA-0056 нет описания
 
ну так у меня описание есть не во всех дублированных товарах
а этот запрос уберает если есть в одном из дубликатов описание , так?
Этот запрос уберет повторяющиеся записи (у которых повторяются все поля)
 
ну так у меня описание есть не во всех дублированных товарах
а этот запрос уберает если есть в одном из дубликатов описание , так?
Код:
select distinct name, kartinka, opisalovo from tovari where opisalovo<>'' and kartinka<>''
есть товары без описания дублированные , с ними что делать?

т.е.
товар 1
GSM антенна Adactus ADA-0059 описания
GSM антенна Adactus ADA-0059 нет описания

товар 2
GSM антенна Adactus ADA-0056 нет описания
GSM антенна Adactus ADA-0056 нет описания

Distinct уберет только записи, повторяющиеся по всем полям, при этом те, у которых описалова нет вообще не попадут (обрезаны условием where)
Для Вашего случая можно попытаться сделать так:
Код:
select * from tovari group by name
(это некорректно с точки зрения SQL, но в мускуле работает)
Так можно выбрать именно "старшие" записи.
 
примерно так:
delete t2.* from table t1, table t2 where t1.descr = t2.descr AND (t1.descr <> '' AND t2.descr = '') OR (t1.descr = t2.descr AND t1.descr = '' AND t2.id>t1.id)
 
по столбцу с названием сделай UNIQUE-индекс и всё будет нормально, а при вставке данных используй INSERT INTO ... ON DUPLICATE UPDATE ... и будет счастье)..
Кстати, DISTINCT работает медленней чем GROUP BY `col_name`
 
Версия сервера какая?
если 5.х - попробуй
create table blabla as select ...
 
можно использовать конструкцию типа

insert into table_name2
select *
from table_name1
group by "список полей по которым повторения"

у table_name2 такая же структура что и у table_name1
 
А можно пожалуйста более подробней как для самого самого новичка что куда вставлять, как зделать такую вещь? Просто имею дело з базой где товара свыше 6000! Помогите плиз заранее благодарен!
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху