Untitled

PROBLEM
 avatar
unknown
mysql
a year ago
2.5 kB
14
Indexable
g_hDatabase.Query(Thread_Empty,
                "DELIMITER // \
                CREATE PROCEDURE IN NOT EXISTS `UpdateMapPoints`(IN `in_map_id` INT, IN `in_run_type` INT, IN `in_run_id` INT, IN `in_class` INT) DETERMINISTIC CONTAINS SQL SQL SECURITY INVOKER \
                BEGIN \
                    DECLARE v_rec_id, completions, v_tier INT; \
                    DECLARE v_rank INT DEFAULT 0; \
                    DECLARE calculated_points, default_points, wr, pr DOUBLE; \
                    DECLARE done INT DEFAULT FALSE; \
                    DECLARE cur CURSOR FOR SELECT record_id, time FROM records ORDER BY time ASC; \
                    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; \
                    OPEN cur; \
                    SELECT COUNT(*) INTO completions FROM records WHERE map_id = in_map_id AND run_type = in_run_type AND run_id = in_run_id AND class = in_class; \
                    IF in_class = 0 \
                    THEN \
                        SELECT soldier_tier INTO v_tier FROM map_info WHERE map_id = in_map_id AND run_type = in_run_type AND run_id = in_run_id; \
                    ELSEIF in_class = 1 \
                    THEN \
                        SELECT demoman_tier INTO v_tier FROM map_info WHERE map_id = in_map_id AND run_type = in_run_type AND run_id = in_run_id; \
                    END IF; \
                    SELECT pts INTO default_points FROM points WHERE tier = v_tier; \
                    loop_through_rows:LOOP \
                        FETCH cur INTO v_rec_id, pr; \
                        IF done THEN \
                            LEAVE loop_through_rows; \
                        END IF; \
                        SET v_rank = v_rank + 1; \
                        IF v_rank = 1 \
                        THEN \
                            SET wr = pr; \
                            SET calculated_points = default_points + ((default_points * ((wr / pr) * 1.5)) * 1.3) + completions; \
                        ELSE \
                            SET calculated_points = default_points + ((default_points * ((wr / pr) * 1.5)) / 1.3) + completions * 0.75; \
                        END IF; \
                        UPDATE records SET `records`.`rank` = (SELECT v_rank), `records`.`points` = (SELECT calculated_points) WHERE record_id = v_rec_id; \
                    END LOOP; \
                    CLOSE cur; \
                END \
                DELIMITER ;");
Editor is loading...
Leave a Comment