Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 06.12.2017, 13:31
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,733

jtag, что мешает реализовать такой алгоритм:
Получаю список данных на обработку;
Собираю все айдишники пользователей в массив;
Запрашиваю из бд поля id и ИНН пользователей, чей id лежит в собранном массиве;
Создаю объект "insert", в который буду складывать данные для вставки в бд;
В цикле гоняю полученные данные заполняя объект "insert";
Если "insert" не пустой, создаю в бд сразу несколько записей на основе данных из этого объекта.

Описанный мною алгоритм требует всего 3 запроса и 1 цикл.
Ответить с цитированием
  #12 (permalink)  
Старый 06.12.2017, 13:33
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Nexus,
по уму, так тут никаких циклов и требуется, собственно как и четыре запроса.

Последний раз редактировалось laimas, 06.12.2017 в 13:42.
Ответить с цитированием
  #13 (permalink)  
Старый 06.12.2017, 13:48
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,733

laimas, "insert select"?
Ответить с цитированием
  #14 (permalink)  
Старый 06.12.2017, 13:53
Интересующийся
Отправить личное сообщение для jtag Посмотреть профиль Найти все сообщения от jtag
 
Регистрация: 12.01.2016
Сообщений: 19

Спасибо. Попробую реализовать.
Ответить с цитированием
  #15 (permalink)  
Старый 06.12.2017, 13:54
Аспирант
Отправить личное сообщение для NeoN Посмотреть профиль Найти все сообщения от NeoN
 
Регистрация: 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();
Ответить с цитированием
  #16 (permalink)  
Старый 06.12.2017, 13:54
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,733

jtag, если у вас все необходимые данные есть в бд, то можно обойтись 1 запросом к бд.
Без циклов и прочего.
Ответить с цитированием
  #17 (permalink)  
Старый 06.12.2017, 14:07
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Nexus
"insert select"?
Судя по запросам и описанию, это должен быть запрос UPDATE ... WHERE field IN(SELECT ... WHERE (SELECT ... WHERE ... NOT EXISTS))

Я не знаю node и для меня в запросах setTimeout(), это вообще какая-то дикость. Но то что запросы организованы не как полагается, это видно сразу.
Ответить с цитированием
  #18 (permalink)  
Старый 06.12.2017, 14:14
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,733

laimas, я тоже ноду не знаю, но автору, вроде как нужно добавить пользователей, для которых в бд нет инн.
Ответить с цитированием
  #19 (permalink)  
Старый 06.12.2017, 14:15
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,733

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 в 14:27.
Ответить с цитированием
  #20 (permalink)  
Старый 06.12.2017, 14:33
Кандидат Javascript-наук
Отправить личное сообщение для Lion777 Посмотреть профиль Найти все сообщения от Lion777
 
Регистрация: 04.11.2017
Сообщений: 117

процедуру напиши
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
несколько запросов ajax anton41k AJAX и COMET 0 15.09.2014 21:31
Поиск и устранение причины странных запросов AndrewP Работа 2 29.11.2013 14:10
нужна отправка post запросов через jQuery в формате Json mstdmstd Events/DOM/Window 2 31.05.2012 15:08
Очередь XML запросов Евгений М AJAX и COMET 4 01.02.2012 11:05
Отследить окончание нескольких ajax запросов mikel AJAX и COMET 2 11.03.2011 17:14