2

DB 有几张桌子,tblPizza,然后是用于浇头的桌子,tblCheese、tblMeat 和 tblVeggie。我想编写一个 MySQL 函数,它将采用 VARCHAR 参数,在每个表中查找 priceFactor,将它们加在一起,然后返回该小数。在谷歌搜索和搜索之后,我拼凑了这个。我在这里或在谷歌上找到的结果都没有试图做足够接近我想要做的答案。

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,PHP 会将其 JSON 发送到 jQuery。

谢谢!99% 的时间,我都能在这里找到我需要的东西^_^

编辑指出,参数中的一个(但只有一个)可能为空。用户只需要选择两个披萨配料,但不能选择少于这个。

4

1 回答 1

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
);
于 2012-10-17T23:51:35.990 回答