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

123 4
siv1987
На сайте с 02.04.2009
Offline
427
#11
nomarketing:
Ну все таки один вопрос остается пока не решен это удаление дубликатов + ассинхронное удаление по айди из другой таблицы

delete + left join `another_table`

or

delete t from table t left join table_with_title z ON z.id=t.id WHERE z.id IS NULL

nomarketing
На сайте с 23.09.2009
Offline
149
#12
siv1987:
delete + left join `another_table`
or
delete t from table t left join table_with_title z ON z.id=t.id WHERE z.id IS NULL

А как быть с дубликатами то ?

Я не пойму одну вещь, как при удалении дубликатов отследить айди постов которые удаляются ?

Ну к примеру

ALTER IGNORE TABLE tbl_name ADD UNIQUE INDEX(title);

в tbl_name есть row > id

Вот при удалении, как узнать какой id удалился ?..

Может я не правильно как то логически себе это представляю..

SV
На сайте с 03.11.2008
Offline
1393
#13
nomarketing:
Ну я понял к чему вы клоните

Мб. Но на всяк случай попробую пояснить.

Связи типа "многие-ко-многим" требуют промежуточную таблицу.

В самой базе может не быть видно прямых связей (зависимостей), а только в самом же движке жестко прописано какое поле в какой таблице нужно использовать.

Проще говоря по БД может не быть видно что значение в поле ID_metadata в таблице tbl_meta тоже самое, что и в поле ID_post в таблице tbl_content.

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

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Топики помощи с ⓌordPress (https://searchengines.guru/ru/forum/1032910 ) и основы безопасности сайтов ( https://searchengines.guru/ru/forum/774117 ). *** Помощь\консультации в топиках форума - БЕСПЛАТНО. Платные услуги ( https://wp.me/P3YHjQ-3 ) - с бюджетом от 150$ ***
nomarketing
На сайте с 23.09.2009
Offline
149
#14
SeVlad:
Мб. Но на всяк случай попробую пояснить.
Связи типа "многие-ко-многим" требуют промежуточную таблицу.

В самой базе может не быть видно прямых связей (зависимостей), а только в самом же движке жестко прописано какое поле в какой таблице нужно использовать.

Проще говоря по БД может не быть видно что значение в поле ID_metadata в таблице tbl_meta тоже самое, что и в поле ID_post в таблице tbl_content.
И это не самый сложный случай. Бывает, что к ИДшику поста "подязываются" данные из нескольких таблиц, при этом не по ИД поста, а через одно или несколько промежуточных данных.

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

Просто если бы я знал эти айди я бы мог удалить все айди с другой таблицы.

siv1987
На сайте с 02.04.2009
Offline
427
#15
nomarketing:
ADD UNIQUE INDEX

А нахрена использовать UNIQUE INDEX для удаления дублей? Этот индекс имеет немного другое логическое значение.

Какие отсутствуют в таблице те и удалились. Какие ид отсутствуют можете узнать джоинив другую таблицу в которые есть связь с ними.

nomarketing
На сайте с 23.09.2009
Offline
149
#16
siv1987:
А нахрена использовать UNIQUE INDEX для удаления дублей? Этот индекс имеет немного другое логическое значение.
Какие отсутствуют в таблице те и удалились. Какие ид отсутствуют можете узнать джоинив другую таблицу в которые есть связь с ними.

Да, я понимаю что опытный бы юзер понял все, который работает с бд не мало времени :)

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

1. Что использовать вместо ? UNIQUE INDEX ? (Мне нужно что бы в будущем нельзя было вставить один и тот же тайл, поэтому я и решил использовать уникальный индекс.. тем самым удалив дубли)

2.Получается мне нужно сделать две копии таблицы tbl_name и tbl_name_tmp, потом в одной из них, удалить дубликаты, а потом что ? как сделать такое джоин или что там что бы показал какие айди были удалены ?

siv1987
На сайте с 02.04.2009
Offline
427
#17
nomarketing:
1. Что использовать вместо ? UNIQUE INDEX ? (Мне нужно что бы в будущем нельзя было вставить один и тот же тайл, поэтому я и решил использовать уникальный индекс.. тем самым удалив дубли)

В будущем, прежде чем вставлять, проверяйте уникальность значения в бд. UNIQUE INDEX больше подходит для полей которые действительно должны быть уникальными - ид, ключи и пр, тайтл это не совсем то поле. Для удаления используйте пример с первой страницы, для вставки - создайте функцию checkTitle($title) которая будет проверять уникальность тайтла.

nomarketing:
Получается мне нужно сделать две копии таблицы tbl_name и tbl_name_tmp, потом в одной из них, удалить дубликаты, а потом что ?

Нет. Таблицы используйте те, которые у вас связаны с этой.

nomarketing:
как сделать такое джоин или что там что бы показал какие айди были удалены ?

Пример показан выше.

select t.* from table t left join table_with_title z ON z.id=t.id WHERE z.id IS NULL

table_with_title - таблица с тайтлами.

table - связанная таблица

nomarketing
На сайте с 23.09.2009
Offline
149
#18
siv1987:
В будущем, прежде чем вставлять, проверяйте уникальность значения в бд. UNIQUE INDEX больше подходит для полей которые действительно должны быть уникальными - ид, ключи и пр, тайтл это не совсем то поле. Для удаления используйте пример с первой страницы, для вставки - создайте функцию checkTitle($title) которая будет проверять уникальность тайтла.


Нет. Таблицы используйте те, которые у вас связаны с этой.


Пример показан выше.
select t.* from table t left join table_with_title z ON z.id=t.id WHERE z.id IS NULL
table_with_title - таблица с тайтлами.
table - связанная таблица

Щас попробую ваш пример,

Вопрос на счет проверки тайтла, (я думал сделать проверку таким образом)

1.Сначала уникализируем все тайтлы.

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

Все верно ? почему тайтл нельзя уникализировать ? (тогда как лучше посоветуйте)

siv1987
На сайте с 02.04.2009
Offline
427
#19
nomarketing:
2.Перед вставкой поста, делаем селект из бд, с тайтлом юзера, если не нашли, вставляем, если нашли, возвращаем сообщение что тайтл уже существует.

Для этого первый пункт не нужен.

nomarketing:
почему тайтл нельзя уникализировать ?

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

nomarketing
На сайте с 23.09.2009
Offline
149
#20
siv1987:
Для этого первый пункт не нужен.


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

Спасибо за приме выше с IS NULL нашел способ естесвенного отбора.

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

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

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

естесвенно без супернагрузок на бд

123 4

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