2012-10-17 17 views
2

DB有幾張表,tblPizza,然後是它的澆頭,tblCheese,tblMeat和tblVeggie表。我想寫一個將使用VARCHAR參數的MySQL函數,在每個表中查找priceFactor,將它們加在一起並返回小數點。谷歌搜索和搜索後,我已經拼湊起來了。我在這裏或Google上找到的結果都沒有試圖做足夠接近我想做的事情來做出答案。MySQL函數從多個表中添加價格

DELIMITER $$ 

CREATE FUNCTION `dbname`.`calculatePrice` (cheese VARCHAR(50), meat VARCHAR(50), veg VARCHAR(50)) 
RETURNS DECIMAL 
BEGIN 
DECLARE price DECIMAL; 
SET price = SUM(SELECT priceFactor AS cheesePrice UNION ALL SELECT priceFactor AS meatPrice FROM tblMeat WHERE meatName = meat UNION ALL SELECT priceFactor AS vegPrice FROM tblVeggie WHERE veggieName = veg) FROM tblCheese WHERE cheeseName = cheese); 

RETURN price; 
END 

MySQL不喜歡SUM之後的SELECT,但我不知道如何得到我想要的而沒有子查詢。每個表格中都有重複的列名稱,表格之間沒有相關性來證明JOIN。

結果將被踢回到PHP,這將JSON一起jQuery。

謝謝! 99%的時間,我可以找到我需要在這裏^ _^

編輯注意到有可能一個(但只有一個)的參數可能爲空。用戶只需要選擇兩個披薩配料,但不能選擇任何比這更少的配料。

+1

你試過選擇總和(priceFactor)呢? – Grzegorz

回答

1

試試這個,

SET price = 
(
    SELECT SUM(x.Price) 
    FROM 
    (
     SELECT priceFactor AS Price FROM tblCheese WHERE cheeseName = cheese 
     UNION ALL 
     SELECT priceFactor AS Price FROM tblMeat WHERE meatName = meat 
     UNION ALL 
     SELECT priceFactor AS Price FROM tblVeggie WHERE veggieName = veg 
    ) x 
); 
+0

工作!謝謝!!!^_^ – Janet

+0

@Janet歡迎您! –