I'm calling stored procedure in Coldfusion8/MySQL which gets 3 types of min and max prices from products table.
I'm having problems returning the temp table back to MySQL. The below code only returns the first foundMin value and not the temp table itself.
If I run this inside MySQL the results are
foundmin 1st price > returned to Coldfusion
foundmax 1st price
foundmin 2nd price
foundmax 2nd price
foundmin 3rd price
foundmax 3rd price
temporary table
So I'm returning all individual table entries plus the table, when I only want the table.
Here is my code:
BEGIN
DECLARE filterILN vARCHAR(100);
DECLARE localILN vARCHAR(100);
DECLARE orderILN vARCHAR(55);
#search strings
DECLARE p_e vARCHAR(55) DEFAULT 'art.preis_ek';
DECLARE p_a vARCHAR(55) DEFAULT 'art.preis_aktuell';
DECLARE p_r vARCHAR(55) DEFAULT 'art.rabatt';
DECLARE strLen INT DEFAULT 4;
DECLARE strCount INT DEFAULT 1;
DECLARE searchFor vARCHAR(55);
DECLARE foundMin DECIMAL(12,2);
DECLARE foundMax DECIMAL(12,2);
# temp table
DROP TEMPORARY TABLE IF EXISTS MinMax;
CREATE TEMPORARY TABLE MinMax (
price vARCHAR(50) DEFAULT ''
, minVal DECIMAL(12,2) DEFAULT 0.00
, maxVal DECIMAL(12,2) DEFAULT 0.00
) ENGINE=MEMORY;
# FILTER 1
IF param_reference_iln = 'A' THEN SET filterILN = 'B'
ELSEIF param_reference_iln = 'C' THEN SET filterILN = 'D'
END IF;
# FILTER 2
IF param_filter IS NOT NULL AND param_filter != ""
THEN SET localILN = CONCAT('AND (iln = "', param_filter, '")');
ELSE SET localILN = '*';
END IF;
# FILTER 3
IF param_preorder = 'ja'
THEN SET orderILN = CONCAT('AND vororder = "',param_preorder, '"');
ELSE SET orderILN = '*';
END IF;
#loop over strIDs
getPrice:
LOOP
IF ELT(strCount, p_e, p_a, p_r) = 'art.rabatt'
THEN SET searchFor = 'art.preis_ek - art.preis_aktuell)/art.preis_ek';
ELSE SET searchFor = ELT(strCount, p_e, p_a, p_r);
END IF;
#min
SELECT MIN(searchFor) AS foundMin
FROM artikelstammdaten AS art
WHERE art.aktiv = "ja"
AND art.bestand != "0"
AND filterILN
AND art.modus = CONCAT('OPEN ', param_unlocked_iln)
AND localILN
AND orderILN
LIMIT 1;
#max
SELECT MAX(searchFor) AS foundMax
FROM artikelstammdaten AS art
WHERE art.aktiv = "ja"
AND art.bestand != "0"
AND filterILN
AND art.modus = CONCAT('OPEN ', param_unlocked_iln)
AND localILN
AND orderILN
LIMIT 1;
# insert into temp table
INSERT INTO MinMax ( price, minVal, maxVal )
VALUES( ELT(strCount, p_e, p_a, p_r), foundMin, foundMax );
# increate counter by 1, end if strLen reached
SET strCount = strCount+1;
IF strCount = strLen
THEN LEAVE getPrice;
END IF;
END LOOP getPrice;
#output table
SELECT * FROM MinMax;
#destroy
DROP TABLE MinMax;
END
The values are calculated correctly and also inserted in the temp table where they should be. The only problem is the above returns both the table entries AND the table.
Question:
How do I return just the temp table as a resultset/struct, which I can then work with in Coldfusion?