Sergey_K
Pavel
вот сейчас просто опишу свою подзадачу. офигеете от ее неприятности.
Nikolay
create
заглянул туда, там столько лишних действий... кеш, алиасы, куча событий, вычисление menuindex, группы ресурсов, короче всё что можно. Как вариант прямо в папке с процессорами создать копию файла create.class.php, скажем mycreate.class.php и повырубать всё лишнее. Не зняю правда насколько это трудоёмко
Nikolay
700 строчек не так много
Pavel
Nikolay
Nikolay
и вообще все средства хороши, если вариантов нет)
Pavel
у меня такая проблема сейчас, что главная таблица есть. и есть таблица "фирмы". уникальное поле у фирмы - это ИНН. но так получилось, что среди фирм есть много дублей, у которых ИНН одинаковый. И мне надо в главной таблице оставить поле одно поле только со ссылкой на правильную фирму, а не на ее клоны. Вичистить базу, котороче. удалить лишние фирмы и оставить в основной таблице только id актуальной версии фирмы, а всех клонов грохнуть. но у этих клонов есть свои подчиненные таблицы с адресами телефонами. Нужно чтобы они перешли к правильной вресии фирмы. И это я думал запросами реализовать. циклами то легко. но 2 ляма записей!
Pavel
вот эту кашу разгребаю сейчас. и знаю как сделать. просто из-за того что 2 МЛН записей очень долго происходит всё.
Sergey_K
ну так отбери во временную таблицу все инн, а потом уже фильтруй
Pavel
Sergey_K
sql
Sergey_K
slect distinct inn
Sergey_K
парни тут любят distinct
Pavel
парни тут любят distinct
да. это то мы сделаем. но нужно еще вычислить клонов, у которых в связанных таблицах есть полезная инфа (емейлы, телефоны) чтоб их тоже подтянуть перед тем как удалить.
Sergey_K
ну тяните, тут уж вам виднее
Nikolay
"но так получилось, что среди фирм есть много дублей" - как-то оно всегда так получается в таких задачах)) эти базы в большинстве своём такое говно, которое зачастую вручную выгребать нужно, или в полуавтомате
Pavel
Sergey_K
ну только по инн легко получить все формальные реквизиты по API
Sergey_K
Та же dadata
Nikolay
а если бы сразу перед добавлением инн была бы проверка на уникальность, то такого бы не было
Sergey_K
зачем вся эта херня не ясно... ну разве что счетов там нет
Pavel
Та же dadata
можно но не все к сожалению. мы эти данные дергали при помощи платных api которые не предоставляет dadata
Nikolay
как вариант сделать таблицу с уникальными записями, и отдельную где чисто дубли, а уже потом думать, по крайней мере будет видно количество дублей, и различия
Pavel
но это опять от modx отходим поэтому я перестаю развивать тему. сейчас буду курить что можно сделать в запросами чтоб минимизировать потраченное время.
Pavel
Nikolay
как-то так, но всё равно куча нюансов всплывает)
Pavel
ато в одном клоне могут емейлы быть заполнены, в другой телефоны.
Nikolay
ну это повсеместно))
Pavel
клиент любит кнопочку "чистка от дублей". нажал и всё стало идеально в один клик
Nikolay
ага, лучше бы он любил порядок в базе)
Pavel
вот вот. нефиг с разных баз таскать инфу )
Pavel
без предварительной обработки
Sergey_K
Pavel
у дадаты есть платные апи.
есть. они просто не всю информацию предоставляют которую мы купили уже в другом месте. по кредитам всяким.
Sergey_K
ну тогда купите 100 китайских женщин, которые будут вручную чистить :)
Sergey_K
больше никак
Sergey_K
Ну вперед.
Интересно, как "прогерское решение" решит, какой мейл валидный, если в одной записи будет vasya123@mail.ru, а во второй vasya123@yandex.ru
Pavel
Sergey_K
куда ты их объединишь, если у тебя 10 клонов заполненных?
Nikolay
Pavel
мне хотелось написать единый запрос чтобы он всё это объединил и подменил на основное. все средствами sql
Nikolay
данные на месте, если что их можно поднять
Nikolay
а потом можно кучу скриптов написать, которые будут анализировать данные, сравнивать и т.д.
Pavel
данные на месте, если что их можно поднять
А так чтобы удалились все записи не уникальные по полю, например, по inn, но так, чтоб их дочерние записи пеершли к главной записи выбранной по дате добавления, к примеру.
Nikolay
под один запрос может попасть что-то не то
Pavel
очень сложный запрос и десятков услвоий по каждому полю
Nikolay
я бы так не стал делать) обязательно с косяками пройдёт, потом сиди гадай
Pavel
но это считается грязно. когда запрос внутри цикла.
Nikolay
тоже бы не стал так делать))
Nikolay
один косяк и ночь впустую
Nikolay
лучше всё-таки отсеять дубли, и всю инфу о копиях записать куда-нибудь, можно в поле отдельное. А дальше уже циклами прогонять записи таблицы. Можно несколькими скриптами, пока весь мусор не удалится
Nikolay
ну по крайней мере сколько похожего не попадалось, всегда подобными методами делал. Одним запросом или циклом, это по любому косяки будут
Pavel
Nikolay
ну когда в результате одним махом что-то не то удалишь, заказчик как раз так и назовёт)))
Nikolay
он то узнает не сразу
Nikolay
ну да, я так и делаю обычно
Nikolay
по крайней мере ничего не пропадало, не перезатиралось и т.д.
Pavel
ну да, я так и делаю обычно
во! друган! и идут все те, кто считают, что это можно было бы сделать одним запросом. пусть сами себе эти запросы за 24 часа пишут. легкче использовать язык программирования и по крайней мере можно каждый шаг отследить.
Sentinel
Sentinel
Но вы общайтесь, а я спать 😉
Nikolay
бьюсь об заклад, что они просто понтуются) им пофиг на качество, запустил скрипт, а там трава не расти. Простой факт, если этот способ рабочий, то тогда если делать всё тоже самое но порциями, не должно быть каких-то косяков, но они почему-то всплывают. И это не зависит от тебя, там просто данные могут быть совсем косячные, скажем из 1000 значений только 5 которых ты вообще не мог ожидать
Nikolay
если бы косяков таких не было, я бы делал всё за раз
Nikolay
но они почти всегда бывают, вот прям что-нибудь да всплывёт
Nikolay
не помню ни одного безпроблемного импорта
Pavel
никогда не прощу гадов, которые иногда вместо заполненного поля ИНН выдают 00000000001 и 00000001
Sergey_K
А зачем ты вообще добавляешь поля с кривым ИНН?
Sergey_K
сверки чего?
Pavel
сверки чего?
сверки по их дынным, которые от них пришли
Sergey_K
по их данным инн 00000000001
Sergey_K
Такого инн не существует