我在我的MySQL數據庫中有一個存儲過程,工作正常。Mysql在查詢中多次使用存儲過程結果
但是,由於我必須在相同的查詢中使用相同的參數調用相同的過程3次,如果我可以使用第一次調用的結果而不是後續調用,那麼它會是一個很好的性能改進。
編輯:改變的例子,因爲它過於簡單化,誤導性答覆
我要表:產品,價格 - 價格取決於一年的時間而改變,付款方式,因此結構:(ID,PRODUCT_ID,date_from,DATE_TO,price_mode_1,price_mode_2,price_mode_3)
例子:
我現在要做的就是
SELECT products.*,
get_a_quote(products.id,date_to,date_from, quantity_mode_1,quantity_mode_2,quantity_mode_3)
FROM peoducts
WHERE get_a_quote(products.id,date_to,date_from, quantity_mode_1,quantity_mode_2,quantity_mode_3) >0
ORDER BY
get_a_quote(products.id,date_to,date_from, quantity_mode_1,quantity_mode_2,quantity_mode_3)
LIMIT 10
我想做的事是
SELECT products.*,
get_a_quote(products.id,date_to,date_from, quantity_mode_1,quantity_mode_2,quantity_mode_3) into quote
FROM peoducts
WHERE quote >0
ORDER BY
quote
LIMIT 10
這可能嗎?
* 編輯:功能代碼*
FUNCTION `get_a_quote`(`productid` INT, `startDate` SMALLINT, `endDate` SMALLINT, `mode_1_quantity` SMALLINT, `mode_2_quantity` TINYINT, `mode_3_quantity` TINYINT) RETURNS smallint(6)
BEGIN
declare totalprice,p_1,p_2,p_3 smallint;
SELECT price_1,price_2,price_3 into p_1,p_2,p_3 FROM pricing WHERE id=productid and ((startDate between date_from and date_to) and (endDate between date_from and date_to));
if p_3 is null then
set mode_2_quantity=mode_3_quantity+mode_2_quantity;
set mode_1_quantity=mode_1_quantity+(4*mode_3_quantity);
set p_3=0;
set mode_3_quantity=0;
end if;
if p_2 is null then
set mode_1_quantity=mode_1_quantity+(3*mode_2_quantity);
set p_2=0;
set mode_2_quantity=0;
end if;
if mode_1_quantity>0 and p_1 is null then
return 0;
end if;
set totalprice = p_1*mode_1_quantity+p_2*mode_2_quantity)+p_3*mode_3_quantity);
RETURN totalprice;
END
謝謝大家
[學習變量](http://dev.mysql.com/doc/refman/5.0/en/user-variables.html) – Alexander
你可以把整個SP代碼?值是否是您想要存儲在變量中的值? –
你在說的是功能,而不是程序。不同的故事...... – fancyPants