Генерация запросов в файл на хостинге

Ekklipce

Новичок
Генерация запросов в файл на хостинге

3000 записей в csv файле

механизм тревиален
обращение к базе, условие,- INSERT или UPDATE

zero sized reply (...

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

кто что скажет на этот счет
 

Ekklipce

Новичок
на предмет insert или update если это там есть,
глобально под одну гребенку можно replace попытаться, но..
это же load data infile :)

PS. пока оставил как есть, но если записей даже 30000, а из базы на 200000 элементов - каждый из 30000 проверять на предмет есть он или нет - делал, работает но долго ждать

ЗЫ. какие то другие может есть алгоритмы, хотя куда уж проще
 

Фанат

oncle terrible
Команда форума
моет есть.
если нам расскажут целиком задачу, а не её огрызок, то, может быть, алгоритм и найдётся.
 

Ekklipce

Новичок
...логично вобщем то...

таблица

источних данных - csv файлы с данными
если элемента в таблице нет - инсерт, если есть - update.

вот собственно и всё.

как сделал я : генерирую файл с запросами при аплоаде csv файла на сервер, финально "закачивается" уже готовый файл с запросами (с проверкой на insert\update), потом другой командой он выполняется - и все довольны :)..

самая продолжительная задача тут : проверить инсерт или апдейт если уже имеется около 200000 записей в таблице
 

Ekklipce

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

-~{}~ 03.10.05 18:17:

REPLACE INTO element (name, producer, cat, params)
VALUES ('KT5','LG','1','params')

REPLACE INTO element (name, producer, cat, params)
VALUES ('KT5','LG1','1','params')

primary key id, name

вставляет 2 элемента с одинаковым... если ты про этот рэплэйс
или ошибка где
 

Steamroller

Новичок
Автор оригинала: Ekklipce

ЗЫ. какие то другие может есть алгоритмы, хотя куда уж проще
Есть способ очень быстрый, только надо аккуратно реализовать все в плане индексов, и на древних версиях mysql не сработает.
Вкратце так:
1) Создаешь промежуточную таблицу (назовем её tmp1), заливаешь в неё свой csv, например через load data infile
2) Делаешь апдейт на джойн этих таблиц:
UPDATE table, tmp1 SET table.name = tmp1.name, table.producer = tmp1.producer ....... WHERE (тут условия нужные тебе формулируешь)
3) Делаешь INSERT table (список полей) SELECT (список) FROM tmp1 WHERE (тут условие наоборот, т. е. отбираем необработанные поля).
В пунктах 2 и 3 надо для условий сформулировать соответсвующие select'ы, и посмотреть для них explain, создать если надо индексы, чтоб не сканило почем зря.
 

Ekklipce

Новичок
ТОЛЬКО все это я реализовал намного легче :)

поставил UNIQUE KEY на name и REPLACE все запросы - идёт на ура !

тема закрыта, всем большое спасибо за содействие, и фанату за неожиданно отсутствие злости :)
 
Сверху