DELIMITER $$
DROP PROCEDURE IF EXISTS SP_IWMT_GetPileByName $$
CREATE PROCEDURE SP_IWMT_GetPileByName (Name Varchar(10))
DETERMINISTIC
READS SQL DATA
SQL SECURITY INVOKER
COMMENT 'Gets Pile Data based on Pile Type'
BEGIN
-- Use a cursor to move through our temp table to gather additional information
DECLARE vFileID INT;
DECLARE vFileMimeType INT;
DECLARE vFileSize INT;
DECLARE vFileTitle VARCHAR(255);
DECLARE vSubmitterID INT;
DECLARE vSubmitDate DATE;
DECLARE vSubmitter VARCHAR(32);
DECLARE vGoodVotes INT;
DECLARE vBadVotes INT;
DECLARE vOffensiveVotes INT;
DECLARE vFileComments INT;
DECLARE no_more_rows BOOLEAN;
DECLARE fCursor CURSOR FOR
SELECT a.file_id, a.file_mime_type, a.file_size, a.file_title, a.file_submitter, a.submit_date, c.user_name as submitter
FROM iwmt_files a, iwmt_users c
WHERE a.FILE_MIME_TYPE IN (
SELECT DISTINCT b.FILE_MIME_TYPE
FROM iwmt_file_mime_types b
WHERE b.PILE_TYPE = Name)
AND c.user_id = a.file_submitter
ORDER BY a.SUBMIT_DATE DESC
LIMIT 0,20;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET no_more_rows := TRUE;
-- Create a temporary table to hold our base data
DROP TEMPORARY TABLE IF EXISTS Pile;
CREATE TEMPORARY TABLE Pile (
file_id INT
,file_mime_type INT
,file_size INT
,file_title VARCHAR(255)
,file_submitter VARCHAR(32)
,file_submitter_id INT
,submit_date DATE
,good_votes INT
,bad_votes INT
,offensive_votes INT
,file_comments INT
);
-- Move through the temp table and update columns
OPEN fCursor;
loop_fCursor: LOOP
FETCH fCursor
INTO vFileID
,vFileMimeType
,vFileSize
,vFileTitle
,vSubmitterID
,vSubmitDate
,vSubmitter;
IF no_more_rows THEN
CLOSE fCursor;
LEAVE loop_fCursor;
END IF;
-- Update columns
SELECT vGoodVotes = COUNT(vote) FROM iwmt_file_comments WHERE file_id = vFileID AND vote > 0;
SELECT vBadVotes = COUNT(vote) FROM iwmt_file_comments WHERE file_id = vFileID AND vote < 0;
SELECT vOffensiveVotes = COUNT(offensive_flag) FROM iwmt_file_comments WHERE file_id = vFileID AND offensive_flag = 1;
SELECT vFileComments = COUNT(comment_id) FROM iwmt_file_comments WHERE file_id = vFileID;
-- Insert into our temp table
INSERT INTO Pile (file_id, file_mime_type, file_size, file_title, file_submitter_id, file_submitter, submit_date, good_votes, bad_votes, offensive_votes, file_comments)
VALUES(vFileID
,vFileMimeType
,vFileSize
,vFileTitle
,vSubmitterID
,vSubmitter
,vSubmitDate
,vGoodVotes
,vBadVotes
,vOffensiveVotes
,vFileComments
);
END LOOP loop_fCursor;
-- Return our final resultset
SELECT * FROM Pile;
END $$
DELIMITER ;