Удаление дублей, базы, и последствие.

123 4
nomarketing
На сайте с 23.09.2009
Offline
189
1803

Вообщем есть, база, в ней есть 6к сообщение, из 6к сообщение наверно 1.5к дубли.

Как правильно удалить дубли, что бы не навредить работе бд, т.е изначальной или это не как не повлияет ?

Удаление происходит таким запросом.

ALTER IGNORE TABLE title ADD UNIQUE INDEX(title);

В итоге, как я понял, после выполнение это запроса, индексу title присвоился ключ Unique

Но теперь, вот что происходит, при, заполнении формы, если юзер напишет title, и он будет существовать в БД, то вылетит ошибка о том, что такой тайтл уже есть (dublicate entry..)

Тогда я делаю след действие, перед отправкой данных в бд, я делаю запрос, в базу, с title который ввел юзер, если его нет, тогда отправляем данные в бд, если есть, пишем что мол введите другой title.

Есть ли ошибки в логике ? может что не учел.

Капитан покидает корабль последним
siv1987
На сайте с 02.04.2009
Offline
427
#1

delete t from table t inner join table z on z.title=t.title where t.id>z.id

[umka]
На сайте с 25.05.2008
Offline
456
#2

Удаление дублей в БД, конечно же, никак не навредит работе самой БД.

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

Чтобы не было дублей по определённому полю, как вы верно написали, нужно добавить уникальный индекс.

Можно проверять наличие записи перед добавлением отдельным селектом, а можно сразу добавлять и проверять код возвращаемой ошибки.

Лог в помощь!
nomarketing
На сайте с 23.09.2009
Offline
189
#3
'[umka:
;13435845']Удаление дублей в БД, конечно же, никак не навредит работе самой БД.
Но может навредить работе сайта, если у вас были какие-то логические связи с каждой из этих записей в отдельности.

Чтобы не было дублей по определённому полю, как вы верно написали, нужно добавить уникальный индекс.
Можно проверять наличие записи перед добавлением отдельным селектом, а можно сразу добавлять и проверять код возвращаемой ошибки.

А...т.е если я удаляю дубль, мне нужно удалить по логической цепочти все что с ним связанно..

Ага т.е если в этом сообщении были картинки, то ищем ид сообщение в картинка и удаляем его так же. Ну если это затрагивает только эти логические связи тогда можно отследить и удалять все вместе, т.е удаляется дубль, и все что с ним связанно в других таблицах

nomarketing
На сайте с 23.09.2009
Offline
189
#4

Возник не большой вопрос, вообщем удаляю я дубли с помощью комманды

ALTER IGNORE TABLE tbl_name ADD UNIQUE INDEX(title);

но есть еще таблица

tbl_pic

Как мне одним запросом удалить дубли в tbl_name и сразу по айди удалять записи в tbl_pic ?

Эти две таблицы можно связать по id но как сделать все вместе с уникализацие и удалением ?

Или только нужно скрипт писать ?

SeVlad
На сайте с 03.11.2008
Offline
1609
#5
nomarketing:
Вообщем есть, база, в ней есть 6к сообщение, из 6к сообщение наверно 1.5к дубли.

В базе не "сообщения", а "данные". "Сообщения" - в движке. Соответственно только движок может знать (а может и не знать) все связи этого сообщения.

'[umka:
;13435845']если у вас были какие-то логические связи с каждой из этих записей в отдельности.

+150. Причём эти связи совсем не обязательно будут напрямую указаны в таблицах. Т.е. могут быть промежуточные таблицы и не факт что явно будут видны нужные связи.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
nomarketing
На сайте с 23.09.2009
Offline
189
#6
SeVlad:
В базе не "сообщения", а "данные". "Сообщения" - в движке. Соответственно только движок может знать (а может и не знать) все связи этого сообщения.


+150. Причём эти связи совсем не обязательно будут напрямую указаны в таблицах. Т.е. могут быть промежуточные таблицы и не факт что явно будут видны нужные связи.

Не понял на счет промежуточных, вообщем об этом не беспокойтесь, отследить связи не составляет труда, так как движок не сильно сложен, с логической точки зрение и отследить можно все без труда. :) Как бы я удалял сообщение не отслеживая связи ? или как бы движок удалял пост не отслеживая связи ? :) мол пост удалили а картинки которые идут в другой таблице под тем же айди удаленного поста оставим ? :) ну уж нет :) ну вообщем не в этом проблема щас.

Проблема в организации синхронного удаление, ну я просто не сильно разбираюсь еще в запросах, иногда легче скриптом сделать чем составлять сложный запрос, но у меня тут возникла проблема

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

SeVlad
На сайте с 03.11.2008
Offline
1609
#7
nomarketing:
вообщем об этом не беспокойтесь

Хорошо, не буду. :)

nomarketing
На сайте с 23.09.2009
Offline
189
#8
SeVlad:
Хорошо, не буду. :)

Ну все таки один вопрос остается пока не решен :) это удаление дубликатов + ассинхронное удаление по айди из другой таблицы :)

SeVlad
На сайте с 03.11.2008
Offline
1609
#9
nomarketing:
Ну все таки один вопрос остается пока не решен это удаление дубликатов + ассинхронное удаление по айди из другой таблицы

Так ты же сказал:

nomarketing:
Как бы я удалял сообщение не отслеживая связи ? или как бы движок удалял пост не отслеживая связи ? мол пост удалили а картинки которые идут в другой таблице под тем же айди удаленного поста оставим ? ну уж нет ну вообщем не в этом проблема щас.

Мне кацца, тебе надо как-то с этим определится :) В см со связями и отслеживанием оных.

nomarketing
На сайте с 23.09.2009
Offline
189
#10
SeVlad:
Так ты же сказал:

Мне кацца, тебе надо как-то с этим определится :) В см со связями и отслеживанием оных.

Ну я понял к чему вы клоните 😂

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

---------- Добавлено 23.01.2015 в 15:35 ----------

Как я понял что я не могу понять, это к примеру, как удалить дубли по тайтлу, и при этом знать какой айди удалился ?.. тогда на счет удаление с другой таблицы было бы про проще так как я бы уже знал айди который надо удалить..

123 4

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий