nomarketing

nomarketing
Рейтинг
198
Регистрация
23.09.2009
siv1987:
А что еще нужно проверки уникальности значения? По моему здесь все ясно как божий день.

Ну да, только к примеру я возьму точку или теры поставлю или лишнюю букву.. :)

Вообщем я так понял надо базироваться не только по тайтлу тогда..

siv1987:
Уже сто раз советовали.

Ну вы советовали функцию сделать.. какую функцию ?

В том плане, что она должна делать ?

Делать запрос к бд, и на сущестованией тайтла ?

Если только это тогда ок

А так спасибо за помощь :)

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


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

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

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

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

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

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

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:
А нахрена использовать UNIQUE INDEX для удаления дублей? Этот индекс имеет немного другое логическое значение.
Какие отсутствуют в таблице те и удалились. Какие ид отсутствуют можете узнать джоинив другую таблицу в которые есть связь с ними.

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

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

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

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

SeVlad:
Мб. Но на всяк случай попробую пояснить.
Связи типа "многие-ко-многим" требуют промежуточную таблицу.

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

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

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

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

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 удалился ?..

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

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

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

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

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

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

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

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

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

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


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

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

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

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

Всего: 761