Mysql выберите с условием if

У меня есть функция в 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
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
49
1

Ответы 1

Вы можете использовать CASE в запросе, например:

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

Это приведет к значению, возвращаемому function1(), если оно больше 0. Если это не так, но значение, возвращаемое function2(), больше 0, тогда оно будет взято. В противном случае это 0.

Вместо function1(), function2() и т. д. Можно использовать столбец, подзапрос (то есть, если он возвращает скаляр), литерал и т. д. И, конечно, его можно изменить на более или менее условия.

Это будет что-то вроде: НАЧАТЬ СЛУЧАЙ, КОГДА count_adults ()> 0 ТОГДА count_adults () КОГДА count_adulst1 ()> 0 ТОГДА count_adults1 () ELSE 0 END И в php я бы назвал эту функцию с регистром, например: check_members?

Mary 23.04.2018 13:40

@Mary: Этот CASE мне кажется правильным, насколько я понимаю ваше требование. Я не уверен, что вы имеете в виду, говоря «эту функцию», поскольку запрос технически не является функцией PHP ... поместите этот CASE в запрос в том месте, где вы хотите подсчитать. Скажем, если ваш запрос был SELECT count_adults() FROM table;, замените count_adults () на ваш CASE. И используйте полученный запрос в PHP, как если бы вы сделали это с исходным запросом. Надеюсь, это поможет.

sticky bit 23.04.2018 13:51

Другие вопросы по теме