Да, просто замени весь шаблон на этот:
|

06.12.2017, 12:31
|
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,842
|
|
|
jtag, что мешает реализовать такой алгоритм:
Получаю список данных на обработку;
Собираю все айдишники пользователей в массив;
Запрашиваю из бд поля id и ИНН пользователей, чей id лежит в собранном массиве;
Создаю объект "insert", в который буду складывать данные для вставки в бд;
В цикле гоняю полученные данные заполняя объект "insert";
Если "insert" не пустой, создаю в бд сразу несколько записей на основе данных из этого объекта.
Описанный мною алгоритм требует всего 3 запроса и 1 цикл.
|
|

06.12.2017, 12:33
|
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
|
Nexus,
по уму, так тут никаких циклов и требуется, собственно как и четыре запроса.
Последний раз редактировалось laimas, 06.12.2017 в 12:42.
|
|

06.12.2017, 12:48
|
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,842
|
|
|
laimas, "insert select"?
|
|

06.12.2017, 12:53
|
|
Интересующийся
|
|
Регистрация: 12.01.2016
Сообщений: 19
|
|
|
Спасибо. Попробую реализовать.
|
|

06.12.2017, 12:54
|
|
Аспирант
|
|
Регистрация: 01.03.2013
Сообщений: 77
|
|
Сообщение от jtag
|
Всем добрый день. Сейчас отправляю запросы в mysql таким образом:
let x = 0;
setInterval(function(){
connection.query("SELECT * FROM person WHERE x = '"+x+"' ... ", function() {
x++;
});
},500);
Из этого видно что setInterval абсолютно не видит когда приходит обратный ответ с БД. Время пол секунды, установлено приблизительно, т.к. я уверен чтоб БД уже завершила ответ. Как сделать чтобы после ответа сразу отправлялся след запрос? Существует какой-либо шаблон, по которому все пишут, а я вот его не знаю?
|
let x = 0;
function query(){
connection.query("SELECT * FROM person WHERE x = '"+x+"' ... ", function() {
x++;
setTimeout(query,500);
});
}
query();
|
|

06.12.2017, 12:54
|
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,842
|
|
|
jtag, если у вас все необходимые данные есть в бд, то можно обойтись 1 запросом к бд.
Без циклов и прочего.
|
|

06.12.2017, 13:07
|
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
|
Сообщение от Nexus
|
|
"insert select"?
|
Судя по запросам и описанию, это должен быть запрос UPDATE ... WHERE field IN(SELECT ... WHERE (SELECT ... WHERE ... NOT EXISTS))
Я не знаю node и для меня в запросах setTimeout(), это вообще какая-то дикость.  Но то что запросы организованы не как полагается, это видно сразу.
|
|

06.12.2017, 13:14
|
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,842
|
|
|
laimas, я тоже ноду не знаю, но автору, вроде как нужно добавить пользователей, для которых в бд нет инн.
|
|

06.12.2017, 13:15
|
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,842
|
|
NeoN, я node.js не знаю, но не оцените ли саму идею этого кода?
class SomeClass{
/**
* @return Promise
*/
public getFirstOneBillionUsers(){
return new Promise(function(resolve){
var counter=0,
users=[],
request=function(){
connection.query('SELECT * FROM users WHERE id>'+$counter+' LIMIT 1',function(user){
counter++;
users.push(user);
if(counter<Math.pow(10,9))
setTimeout(request,500);
else
resolve(users);
});
};
});
}
}
По-моему гениальный способ зад-чить бд 
Примерное время выполнения метода: чуть меньше 16 лет.
Последний раз редактировалось Nexus, 06.12.2017 в 13:27.
|
|

06.12.2017, 13:33
|
|
Кандидат Javascript-наук
|
|
Регистрация: 04.11.2017
Сообщений: 117
|
|
|
процедуру напиши
|
|
|
|