2014-10-20 141 views
0

我只需要一点点启动,我有点困惑如何做到这一点。我需要做的是从表格中拉出'customer_id',看看客户租了多少物品。如果没有'customer_id',那么它会返回0.我只是没有完全掌握如何做到这一点,所以任何帮助表示赞赏。在MySQL中创建函数

创建表:

CREATE TABLE Customer 
(name VARCHAR(30) NOT NULL, 
    address VARCHAR(70), 
    phone CHAR(10) NOT NULL, 
    customer_id INT(10) PRIMARY KEY NOT NULL); 

创建功能:有这部分启动,但不能确定,如果我做正确。

DELIMITER $$ 
CREATE FUNCTION Num_Of_Rented(IN customer_id INT(10)) 
RETURNS INT(10) 
BEGIN 
    DECLARE num INT(10); 
    SELECT IFNULL() 
    FROM 
    WHERE 
    RETURN num; 
END $$ 
DELIMITER; 
+1

这似乎是一个奇怪的使用情况为一个功能。我假设你有一张与你的客户表相关的表格给出租赁记录。如果是这样,为什么不简单地查询该表? – 2014-10-20 19:07:48

+0

作业需要在一个函数中,查询会更容易我同意,因为这只是拉起多少物品出租,但如果没有customer_id返回0。 @MikeBrant – user2318083 2014-10-20 19:19:56

回答

1

里面的功能,你需要选择你的价值到您的变量,然后返回你的变量:

DECLARE num INT(10); 
SELECT COUNT(field) INTO num 
FROM table 
WHERE condition; 
RETURN num; 

你的情况:

DELIMITER $$ 
CREATE FUNCTION Num_Of_Rented(IN custId INT(10)) 
RETURNS INT(10) 
BEGIN 
    DECLARE num INT(10); 
    SELECT COUNT(*) INTO num 
    FROM Customer C 
    WHERE C.customer_id = custId ; 
    RETURN num; 
END $$ 
DELIMITER; 
+0

'field'是customer_id吗?这似乎是唯一跟踪任何租赁历史的东西。所以如果customer_id在查询中出现2次,它会计数2? – user2318083 2014-10-20 19:16:28

+1

我刚才在我的查询中使用了通用名称,您需要根据您的表格结构和计算条件来确定您需要在每个地方使用的通用名称。在我上面的例子中,“field”可以是任何字段或只是*或'x'或其他,我们只是对记录进行计数,“table”是你的表名,而“condition”是任何where子句,它将缩小你的记录选择到期望的子集。例如:WHERE customer_id = 2 – gmiley 2014-10-20 19:19:31

+0

谢谢,这有助于。当你编辑你的时候,我刚刚改变了它。似乎它接受它,因为它给我0错误。我如何调用函数来查看它是否正常工作? – user2318083 2014-10-20 19:33:17