在mysql数据库上工作。但我需要创建函数的帮助

在mysql数据库上工作。但我需要创建函数的帮助,mysql,Mysql,这是我需要从函数重新创建的结果 +-----------------+------------+------------+-----------+ | exhibition_name | start_date | end_date | Paintings | +-----------------+------------+------------+-----------+ | E1 | 12-18-2015 | 12-18-2015 | 7 | |

这是我需要从函数重新创建的结果

+-----------------+------------+------------+-----------+
| exhibition_name | start_date | end_date   | Paintings |
+-----------------+------------+------------+-----------+
| E1              | 12-18-2015 | 12-18-2015 |         7 |
| E2              | 11-10-2015 | 11-13-2015 |         2 |
| Scupture show   | 10-20-2015 | 10-25-2015 |         4 |
+-----------------+------------+------------+-----------+
CREATE FUNCTION No_of_painting_exhibited(exhb_name VARCHAR(15), startd VARCHAR(11), enddVARCHAR(11), num_paint INT)

RETURNS VARCHAR(15), VARCHAR(11), VARCHAR(11), INT
DETERMINISTIC
SELECT exhibition_name, start_date, end_date, COUNT(*) as Paintings
FROM Shown_at, Exhibition
WHERE name = exhibition_name
Group by exhibition_name;
END
下面这些表格是我正在使用的,以及我已经在其中插入值的值

CREATE TABLE Exhibition(
name VARCHAR(15) NOT NULL,
start_date VARCHAR(11),
end_date VARCHAR(11),
PRIMARY KEY (name)
);

CREATE TABLE Shown_at(
art INT NOT NULL,
exhibition_name VARCHAR(15) NOT NULL,
PRIMARY KEY (art, exhibition_name),
FOREIGN KEY (art) REFERENCES Art_object(id_no), 
FOREIGN KEY (exhibition_name) REFERENCES Exhibition(name)
);
这是我试图完成的功能

+-----------------+------------+------------+-----------+
| exhibition_name | start_date | end_date   | Paintings |
+-----------------+------------+------------+-----------+
| E1              | 12-18-2015 | 12-18-2015 |         7 |
| E2              | 11-10-2015 | 11-13-2015 |         2 |
| Scupture show   | 10-20-2015 | 10-25-2015 |         4 |
+-----------------+------------+------------+-----------+
CREATE FUNCTION No_of_painting_exhibited(exhb_name VARCHAR(15), startd VARCHAR(11), enddVARCHAR(11), num_paint INT)

RETURNS VARCHAR(15), VARCHAR(11), VARCHAR(11), INT
DETERMINISTIC
SELECT exhibition_name, start_date, end_date, COUNT(*) as Paintings
FROM Shown_at, Exhibition
WHERE name = exhibition_name
Group by exhibition_name;
END

有几个问题

  • 您需要更改为以返回表
  • 绘画数量是一个输出,因此可以删除
    num\u paint
    参数
  • 由于展览名称是主键,如果您打算显示多个展览的分组列表,则不希望将其作为输入
  • 似乎您希望使用开始日期和结束日期作为参数
  • 应该对日期使用强日期类型,而不是VARCHAR
  • 请使用ANSI联接来联接表,而不是在where子句上联接
  • 您可以考虑使用代理键(例如,另一个ID、GUID等)来显示姓名是一个有问题的选择。<李>
(使用
分隔符
而不是
,例如
/
):


有几个问题

  • 您需要更改为以返回表
  • 绘画数量是一个输出,因此可以删除
    num\u paint
    参数
  • 由于展览名称是主键,如果您打算显示多个展览的分组列表,则不希望将其作为输入
  • 似乎您希望使用开始日期和结束日期作为参数
  • 应该对日期使用强日期类型,而不是VARCHAR
  • 请使用ANSI联接来联接表,而不是在where子句上联接
  • 您可以考虑使用代理键(例如,另一个ID、GUID等)来显示姓名是一个有问题的选择。<李>
(使用
分隔符
而不是
,例如
/
):


Hi Angel,请提供您在尝试中面临的具体问题,这样您的问题在SO中会得到更好的关注。Hi Angel,请提供您在尝试中面临的具体问题,这样,您的问题在SO中会得到更好的关注。您可能想讨论分隔符,因为这和小提琴在一段时间内都不起作用neebie@StuartLC谢谢,我试过小提琴的例子。但我刚才在通话功能中提出了一个问题,您将“2016/01/01”作为第二个输入。为什么要输入该日期,因为在填充表时,该日期从未出现过?因为我使用了日期数据类型,我们可以使用=和between之类的比较,因此我们可以使用除精确匹配之外的其他选项。您可能想谈谈分隔符,因为这和小提琴在一段时间内不起作用neebie@StuartLC非常感谢。我用小提琴试过这个例子。但我刚才在通话功能中提出了一个问题,您将“2016/01/01”作为第二个输入。为什么要输入那个日期,因为在填充表时,该日期从未出现过?因为我使用了日期数据类型,我们可以使用=和between之类的比较,所以除了精确匹配之外,我们还有其他选项。