Передача списка в запрос к базе данных

0 голосов
wolv33 в категории Как сделать...

Мне нужно извлекать из базы данных строго определенных пользователей, на основе имеющегося у меня файла с их идентификаторами. Узел "База данных" позволяет писать запросы, используя в них переменные, которые мы передаем в порт управляющих переменных. Так что я подумал, что можно передавать в качестве переменных эти самые идентификаторы. К сожалению, в моем случае количество данных идентификаторов составляет около половины миллиона записей.

Я попробовал переводить все эти идентификаторы в одну строку с помощью узла Javascript, из которой создаю переменную, передаваемую на порт управляющих переменных узла "База данных". Однако, в качестве параметра я эту переменную использовать не могу - натыкаюсь на ошибку max query size exceeded clickhouse, которая вызвана тем, что в переменной у меня записана СТРОКА вида "15435878,87456797,54687948,...". Таким образом, запрос SELECT * FROM epays WHERE player in (:player) у меня на выходе будет иметь вид select * from users where player in ("15435878,87456797,54687948,..."), а должен быть select * from users where player in (15435878,87456797,54687948,...).  Я не представляю, как сделать из этой строки нечто вроде массива целочисленных переменных.

Ответы: 2 шт.

0 голосов
Евгений Алябьев
 
Лучший ответ

В узле импорта из Базы Данных можно использовать переменные двух типов:

1) :VarID — при использовании двоеточия (:) в запросе учитывается тип передаваемой переменной (например int или string). Кроме того, количество этих переменных должно быть известно заранее. Получится наподобие: SELECT * FROM epays WHERE player in (:player1, :player2, :player3, ...). Этот вариант в Вашей задаче не подходит.


2) %Condition% — в тексте запроса будет заменена на строковое значение переменной Condition. В данном случае Ваш запрос следует записать так: SELECT * FROM epays WHERE player in (%player%).

0 голосов
Евгений Алябьев

Есть еще одно решение, с использованием SQL. Если есть возможность, то передавать большое количество значений явно табличного вида можно через временную таблицу (назовем ее SelectedPlayers) на сервере базы данных, а после использовать запрос:

SELECT * FROM epays JOIN SelectedPlayers ON epays.id = SelectedPlayers.id

...