我有一个视图,其中列出了我的网络应用所需的所有信息。该视图由select语句,连接和一些if-else子句组成。
现在我想在视图中使用存储函数的结果获得另一列。但是必须使用参数作为参数调用该函数。我不知道如何才能做到这一点。
我的观点如下:
VIEW 'app' AS SELECT 'user'.'user_id' AS 'user_id', 'user'.'name' AS 'name'...
这是我的函数的查询,它取决于u_id(在本例中为103):
SELECT IFNULL((
SELECT !overdue FROM history JOIN status ON history.u_id = status.u_id
WHERE history.executed > IFNULL(status.last,0)
AND history.u_id = 103
ORDER BY history.executed DESC
LIMIT 1),0)
目前我的观看结果如下:
user_id --- name --- created
-------------------------------
103 Peter 2017-02-02
104 Bob 2017-02-01
我希望它有这样的,而逾期是该功能的结果:
user_id --- name --- created --- overdue
----------------------------------------
103 Peter 2017-02-02 1
104 Bob 2017-02-01 0
我想在我的视图中的每个'user_id'上调用此函数,并将结果显示在附加列中(在视图中)。谢谢你的帮助。
修改
所以我只是按照建议从函数中获取了查询,但它只为每个u_id显示相同的值。看起来IN运算符在这里是错误的。
SELECT u_id, IFNULL((
SELECT !overdue FROM history JOIN status ON history.u_id = status.u_id
WHERE history.executed > IFNULL(status.last,0)
AND history.u_id IN (select distinct u_id from app)
ORDER BY history.executed DESC
LIMIT 1),0) from app
如果我更改条目,则每个其他条目都返回相同的结果。所以首先我有:
u_id --- overdue
103 0
104 0
如果我在103中更改了某些内容,这是在select查询中处理的:
u_id --- overdue
103 1
104 1
两者都改变了!
编辑2:
这是我的功能:
begin
declare r int(1);
SET r= (SELECT IFNULL((SELECT !overdue FROM history JOIN status
ON history.u_id = status.u_id
WHERE history.executed > IFNULL(status.last,0)
AND history.u_id IN (select distinct u_id from app)
ORDER BY history.executed DESC
LIMIT 1),0));
return r;
END
我从这样的观点来称呼它:
if((`overdue_fct`() = 1),'overdue','not overdue') AS 'overdue'
答案 0 :(得分:0)
我相信您可以使用IN
运算符并在您的函数中包含该条件,如
SELECT IFNULL((
SELECT !overdue FROM history JOIN status ON history.u_id = status.u_id
WHERE history.executed > IFNULL(status.last,0)
AND history.u_id IN (select distinct user_id from app) //this line
ORDER BY history.executed DESC
LIMIT 1),0)