我在 Mysql 中有一个函数,调用如下:
DB::raw("count_adults(rooms.id) as adults"),
count_adults 是这样的:
BEGIN
DECLARE adults INT;
SELECT
count(*) INTO adults
FROM
clients
WHERE
clients.room_id = r_id
and (age >= 18
or age = 0);
RETURN adults;
END
但是,如果此查询没有返回结果(0),我想执行另一个选择或函数,如下所示:
SELECT count(*) INTO adults FROM client_room, clients
WHERE client_id = clients.id and client_room.room_id = r_id and (age >18 or age = 0)
我可以创建一个 if 条件吗?在php代码中?或者在查询中?像这样的事情:
IF EXISTS (SELECT 1 FROM clients WHERE clients.room_id = r_id)
BEGIN
DECLARE adults INT;
SELECT
count(*) INTO adults
FROM
clients
WHERE
clients.room_id = r_id
and (age >= 18
or age = 0);
RETURN adults;
END
ELSE
BEGIN
DECLARE adults INT;
SELECT count(*) INTO adults
FROM
client_room, clients
WHERE
client_id = clients.id and client_room.room_id = r_id
and (age >18
or age = 0);
END
我已经尝试过了,它似乎有效:
BEGIN
DECLARE adults INT;
SELECT COUNT(*) INTO adults
FROM clients
WHERE clients.room_id = r_id
and (age >= 18 or age = 0);
RETURN IF( adults>0, adults, (SELECT count(*) FROM client_room, clients
WHERE client_id = clients.id
and client_room.room_id = r_id)
);
END
最佳答案
您可以使用CASE
在查询中,例如:
CASE
WHEN function1() > 0
THEN function1()
WHEN function2() > 0
THEN function2()
ELSE
0
END
如果 function1()
返回的值大于 0,则计算结果为该值。如果不是,但 function2()
返回的值大于 0 ,那么就采取了这一点。否则为 0。
可以使用列、子查询(即,如果它返回标量)、文字等来代替 function1()
、function2()
等。当然,它可以改变更多或更少的条件。
关于php - mysql 选择 if 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49970647/