перебор массивов в MYSQL - PullRequest
0 голосов
/ 15 ноября 2018

Есть ли способ передать массив в запрос MySQL и вернуть результаты в виде другого массива? (Кроме использования курсоров, которые были бы излишними для моего варианта использования)

Для одного идентификатора мой запрос выглядит следующим образом.

SET @userId = '04b452cd59dcc656'
Select user_account_number from userstore where u_id = @userId ;

Вместо отправки каждого идентификатора за раз, я пытаюсь отправить список и вернуть список

SET @userId = ('04b452cd59dcc656','eqwe52cddasfsd656');
<query returning the list of account numbers>

Кроме того - я думаю, что это будет эффективнее, чем просто отправка одного идентификатора за раз. Мысли?

1 Ответ

0 голосов
/ 15 ноября 2018

Вы можете использовать IN:

select user_account_number
from userstore
where u_id in ('04b452cd59dcc656', 'eqwe52cddasfsd656') ;

Использование переменных сложнее. Если вы знаете максимальное количество, вы можете сделать:

select user_account_number
from userstore
where u_id in (@id1, @id2);

Не удовлетворяет, но это делает работу. Точно так же неудовлетворительно это FIND_IN_SET():

set @ids = '04b452cd59dcc656,eqwe52cddasfsd656';

select user_account_number
from userstore
where find_in_set(u_id, @ids) > 0;

Увы, здесь не будет индекса.

Наконец, есть динамический SQL:

set @sql = concat('select user_account_number from userstore where u_id in (''',
                  replace(ids, ',', ''','''),
                  ''')'
                 );

prepare s from @sql;
execute s;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...