CREATE TABLE `test` (
`id` INT(11) NULL DEFAULT NULL,
`value` INT(11) NULL DEFAULT NULL
)id | value
------------------------------------
1 10
2 15
3 23SELECT SUM(value) FROM test WHERE id IN (1, 1, 2);
DELIMITER $$
USE `test`$$
DROP PROCEDURE IF EXISTS `get_summed_data`$$
CREATE PROCEDURE `get_summed_data`(IN ids TEXT)
BEGIN
DECLARE iterator INT;
DECLARE number_of_ids INT;
DECLARE id_start_position INT;
DECLARE id_end_position INT;
DECLARE test_value INT;
DROP TEMPORARY TABLE IF EXISTS `tmp_get_summed_data_ids`;
CREATE TEMPORARY TABLE `tmp_get_summed_data_ids` (
`id` INT(11) NULL DEFAULT NULL,
`value` INT(11) NULL DEFAULT NULL
);
SET number_of_ids = ROUND((LENGTH(ids) - LENGTH(REPLACE(ids, ",", ""))) / LENGTH(","))+1;
SET iterator = 0;
SET id_start_position = 1;
WHILE (iterator < number_of_ids) DO
SET id_end_position = CASE
WHEN (LOCATE(',', ids, id_start_position) > 0) THEN
LOCATE(',', ids, id_start_position)
ELSE
LENGTH(ids)+1
END;
SET @id = SUBSTRING(ids, id_start_position, id_end_position-id_start_position);
SET test_value = (SELECT `value` FROM `test` WHERE `id` = @id);
INSERT INTO `tmp_get_summed_data_ids` VALUES (@id, test_value);
SET id_start_position = id_end_position+1;
SET iterator = iterator+1;
END WHILE;
SELECT SUM(`value`) AS 'sum' FROM `tmp_get_summed_data_ids`;
END$$
DELIMITER ;CALL get_summed_data('1,1,2');