Подтвердить что ты не робот

Как передать список идентификаторов в хранимую процедуру MySQL?

Я пишу хранимую процедуру, которая должна передать свои аргументы в IN (..) часть запроса в теле процедуры, например:

DELIMITER //

CREATE PROCEDURE `get_users_per_app` (id_list TEXT)
BEGIN
    SELECT app_id, GROUP_CONCAT(user_id) FROM app_users WHERE app_id IN (id_list) GROUP BY app_id;
END//

DELIMITER ;

Это, очевидно, не работает, потому что, когда я передаю текстовое значение, id_list интерполируется как целое число, и только первый идентификатор рассматривается и используется внутри условия IN().

Я понимаю, что этот конкретный тип процедуры можно заменить вместо содержащегося запроса, но я думаю, что мой вопрос все еще стоит - что, если мне нужно было передавать данные такого рода?

Я также понимаю, что этот подход запроса не может считаться наилучшей практикой, но в моем случае это действительно лучше, чем возврат плоского списка пар ID-ID..

4b9b3361

Ответ 1

Вы можете использовать MySQL FIND_IN_SET(), чтобы использовать список идентификаторов:

CREATE PROCEDURE `get_users_per_app` (id_list TEXT)
BEGIN
    SELECT
        app_id, GROUP_CONCAT(user_id)
    FROM
        app_users
    WHERE
        FIND_IN_SET(app_id, id_list) > 0
    GROUP BY app_id;
    ...