我在mysql中有一个函数,叫做:
DB::raw("count_adults(rooms.id) as 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或函数,如下所示:
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
1条答案
按热度按时间odopli941#
你可以用
CASE
在查询中,例如:将计算为从
function1()
如果大于0。如果不是而是function2()
大于0,则取此值。否则是0。而不是
function1()
,function2()
可以使用列、子查询(即,如果它返回标量)、文本等。当然,它可以被改变到或多或少的条件。