Recuerda que en las ciencias un problema suele tener varias resoluciones, no obstante compartiremos lo más óptimo y mejor.
Solución:
Esto es muy simple para MySQL:
SELECT * FROM table WHERE FIND_IN_SET(table.id, commaSeparatedData);
Referencia: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set
Podría usar una declaración preparada dentro del procedimiento almacenado para lograr esto. Puede crear la consulta de selección completa como un string dentro de una variable y luego concatenar en la coma delimitada string en su cláusula IN. Luego puede hacer una declaración preparada de la consulta string variable y ejecutarlo.
DELIMITER ;;
create procedure testProc(in listString varchar(255))
BEGIN
set @query = concat('select * from testTable where id in (',listString,');');
prepare sql_query from @query;
execute sql_query;
END
;;
DELIMITER ;
call testProc("1,2,3");
Podrías probar este ejemplo de MySql. Antes de usarlo, coloque algunas verificaciones de seguridad de tipo allí (es decir, verifique que la identificación sea un número entero o que coincida con la expresión regular antes de insertar).
# BEGIN split statements ids
DECLARE current_pos INT DEFAULT 1;
DECLARE delim CHAR DEFAULT ',';
DECLARE current CHAR DEFAULT '';
DECLARE current_id VARCHAR(100) DEFAULT '';;
CREATE TEMPORARY TABLE ids (`id` VARCHAR(100));
split_ids: LOOP
SET current = MID(statement_ids, current_pos, 1);
IF (current_pos = LENGTH(statement_ids)) THEN
IF current != delim THEN SET current_id = CONCAT(current_id,current); END IF;
INSERT INTO ids(id) VALUES (current_id);
LEAVE split_ids;
END IF;
IF current = delim THEN
INSERT INTO ids(id) VALUES (current_id);
SET current_id = '';
ELSE
SET current_id = CONCAT(current_id,current);
END IF;
SET current_pos = current_pos+1;
END LOOP split_ids;
# END split statement ids
# to check ids are correct
SELECT * FROM ids;
# to use the ids:
SELECT * FROM statements WHERE id IN (SELECT id FROM ids);
Recuerda mostrar este tutorial si te valió la pena.