如何将ID列表传递给MySQL存储过程?
我正在编写一个存储过程,它应该将其参数传递给过程体中查询的(…)部分中的如何将ID列表传递给MySQL存储过程?,mysql,stored-procedures,Mysql,Stored Procedures,我正在编写一个存储过程,它应该将其参数传递给过程体中查询的(…)部分中的,如下所示: 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 ; 这显然不起作用,因为当我传递一个
,如下所示:
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\u list
被插值为一个整数,并且只考虑第一个id,并在IN()
条件中使用
我意识到这种特殊类型的过程可以被包含的查询代替,但我认为我的问题仍然存在——如果我需要传递这种数据怎么办
我还意识到,这种查询方法可能不是最佳实践,但在我的用例中,它实际上比返回一个简单的ID-ID对列表要好。您应该能够使用MySQL来使用ID列表:
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;
...
请查看我完全忘记在_SET()中查找_的答案,也感谢上面的评论。