У меня есть функция в 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() и т. д. Можно использовать столбец, подзапрос (то есть, если он возвращает скаляр), литерал и т. д. И, конечно, его можно изменить на более или менее условия.
@Mary: Этот CASE мне кажется правильным, насколько я понимаю ваше требование. Я не уверен, что вы имеете в виду, говоря «эту функцию», поскольку запрос технически не является функцией PHP ... поместите этот CASE в запрос в том месте, где вы хотите подсчитать. Скажем, если ваш запрос был SELECT count_adults() FROM table;, замените count_adults () на ваш CASE. И используйте полученный запрос в PHP, как если бы вы сделали это с исходным запросом. Надеюсь, это поможет.
Это будет что-то вроде: НАЧАТЬ СЛУЧАЙ, КОГДА count_adults ()> 0 ТОГДА count_adults () КОГДА count_adulst1 ()> 0 ТОГДА count_adults1 () ELSE 0 END И в php я бы назвал эту функцию с регистром, например: check_members?