php - mysql 选择 if 条件

标签 php mysql laravel function

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

相关文章:

Laravel 5 : put, 在不使用表单构建器的情况下修补和删除请求

Laravel 策略始终返回 403 未经授权

php - "Cannot use Intervention\Image\Facades\Image as Image because the name is already in use"

c++ - 从 C++ 连接 mysql 时出现编译错误

mysql - 如何使我的 MySQL 数据库始终可用?需要一些专家数据库建议!

PHP MYSQL SUM 总计但显示行数

sql - 如何选择最新的数据?

php - 如何在 1-n 之间选择 RAND()

php - 使用 HTML 表格形式进行多行更新查询

php - 使用 php 更改 mysql 触发器中的值?