gpt4 book ai didi

mySQL:将 View 和存储函数与动态参数结合起来

转载 作者:行者123 更新时间:2023-11-29 19:35:46 26 4
gpt4 key购买 nike

我有一个 View ,其中列出了我的网络应用程序所需的所有信息。该 View 由 select 语句、连接和一些 if-else 子句组成。

现在我想在我的 View 中获得另一列,其中包含存储函数的结果。但必须使用参数作为参数来调用该函数。我不知道如何才能做到这一点。

我的观点如下:

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)

目前我的 View 结果如下所示:

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

我想在我的 View 中的每个“user_id”上调用此函数,并将结果显示在附加列(在 View 中)中。感谢您的帮助。

编辑:

所以我只是按照建议从函数中获取查询,但它只显示每个 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 中的某些内容,该内容将在选择查询中处理:

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

我从这样的 View 中调用它:

if((`overdue_fct`() = 1),'overdue','not overdue') AS 'overdue'

最佳答案

好吧,我相信您可以使用 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)

关于mySQL:将 View 和存储函数与动态参数结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41569610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com