Список вопросов
Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4380
0
Помогите пожалуйста решить задачи
24th November, 23:53
6084
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Импорт массива данных в таблицу mySQL?
Просмотров: 332
 
Ответов: 3
Доброе время суток.
Есть задача отпарсить TXT и обновить данные в таблице используя результат парсинга.
Первая подзадача решается без проблем, а вот вторая задача решается, но решение не совсем корректное на мой взгляд.
TXT:
001-03-0027,4000.50,5<br/>
001-03-0031,8000.50,6<br/>
001-03-0028,12000.50,7<br/>
001-03-0033,16000.50,8<br/>
...<br/>
Таблица:
CREATE TABLE properties(<br/>
...<br/>
id_1c VARCHAR(255) DEFAULT NULL,<br/>
price FLOAT DEFAULT 0,<br/>
count INT(11) DEFAULT 0,<br/>
)<br/>
Обрабатывая файл построчно я получаю 3 переменные $array['id_1c'], $array['price'], $array['count']. Которые запихиваю в запрос:
<br/>
'UPDATE properties SET price='.$array['price'].', count='.$array['count'].' WHERE id_1c = '.$array['id_1c'];<br/>
В итоге получаю количество запросов прямо пропорциональное количеству строк в файле, а их там 5000 шт.
Возможно ли как то оптимизировать данный процесс?
С учетом того, что требуется проводить мониторинг успешности обновления данных:
ID 001-03-0027: обновлен успешно<br/>
ID 001-03-0031: не найден в базе<br/>
ID 001-03-002: не найден в базе<br/>
ID 001-03-0033: обновлен успешно<br/>
Спасибо.
001-03-0027,4000.50,5<br/>
001-03-0031,8000.50,6<br/>
001-03-0028,12000.50,7<br/>
001-03-0033,16000.50,8<br/>
...<br/>CREATE TABLE properties(<br/>
...<br/>
id_1c VARCHAR(255) DEFAULT NULL,<br/>
price FLOAT DEFAULT 0,<br/>
count INT(11) DEFAULT 0,<br/>
)<br/><br/>
'UPDATE properties SET price='.$array['price'].', count='.$array['count'].' WHERE id_1c = '.$array['id_1c'];<br/>ID 001-03-0027: обновлен успешно<br/>
ID 001-03-0031: не найден в базе<br/>
ID 001-03-002: не найден в базе<br/>
ID 001-03-0033: обновлен успешно<br/>
Последовательность действий:
1. Прочитали сначала ID записей из файла. Выяснили SELECT'ом какие ID есть в базе данных, а какие нет. Это для мониторинга.
2. Загрузили файл в таблицу с помощью " LOAD DATA INFILE" и ключа «REPLACE».
Смотрите синтаксис этой комманды здесь: www.mysql.ru/docs/man/LOAD_DATA.html
Вот и все, никаких лишних нагрузок. Это будет работать моментально.
Если данных совсем много будет, то поэкспериментируется с дополнительным командами:
SET autocommit = 0;
SET UNIQUE_CHECKS=0;
SET foreign_key_checks = 0;
SET sql_log_bin = 0;
// ваш запрос здесь
commit;
В моей задаче все они используются для ускорения загрузки большого количества данных.
только теория!
сделать мульти инсерт в другую таблицу всех записей одним запросом, а потом сделать нечто такое:
UPDATE table1, table2
SET table1.field1 = table2.field2
table1.field2 = table2.field2
WHERE table1.id = table2.id
я не знаю наверняка сработает ли такой апдейт, но в эту сторону я бы смотрел.
Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться