mysql使用if条件选择

72qzrwbm  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(350)

我在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
odopli94

odopli941#

你可以用 CASE 在查询中,例如:

CASE
  WHEN function1() > 0
    THEN function1()
  WHEN function2() > 0
    THEN function2()
  ELSE
    0
END

将计算为从 function1() 如果大于0。如果不是而是 function2() 大于0,则取此值。否则是0。
而不是 function1() , function2() 可以使用列、子查询(即,如果它返回标量)、文本等。当然,它可以被改变到或多或少的条件。

相关问题