Подтвердить что ты не робот

Почему mysql дает ошибку "Не разрешено возвращать набор результатов из функции"?

Я пытаюсь создать функцию MySQL с помощью phpMyAdmin и получить эту ошибку.

#1415 - Not allowed to return a result set from a function

Код функции приведен ниже

DELIMITER $$

CREATE FUNCTION get_binary_count(a INT, c INT)
RETURNS INT
DETERMINISTIC 

BEGIN

DECLARE c1, c2 INT;
SET c1=0;
SET c2=0;

SELECT left_id AS c1 FROM mlm_user_mst WHERE parent_id=a AND left_id>0;
SELECT right_id AS c2 FROM mlm_user_mst WHERE parent_id=a AND right_id>0;

IF(c1>0 AND c2>0)
THEN
SET c=c+1;
SET c=c+get_binary_count(c1,0);
SET c=c+get_binary_count(c2,0);
END IF;

RETURN c;

END$$

DELIMITER ;

Любые предложения?

Заранее спасибо

4b9b3361

Ответ 1

Потому что

SELECT left_id AS c1 FROM mlm_user_mst WHERE parent_id=a AND left_id>0; 

не устанавливает переменную c1, она возвращает набор с столбцом c1

Вы хотите

SELECT left_id INTO c1 FROM mlm_user_mst WHERE parent_id=a AND left_id>0; 

Аналогично для c2.

Ответ 2

потому что вы используете SELECT запросы, выход которых не хранится в переменных или временных внутри FUNCTION, которые должны. Функция может возвращать только одно значение. Поэтому ваш код должен быть примерно таким:

CREATE TABLE t1 AS SELECT left_id AS c1 FROM mlm_user_mst WHERE parent_id=a AND left_id>0;
CREATE TABLE t2 AS SELECT right_id AS c2 FROM mlm_user_mst WHERE parent_id=a AND right_id>0;

или

SELECT left_id AS c1 INTO @c1 FROM mlm_user_mst WHERE parent_id=a AND left_id>0 LIMIT 1; 

SELECT right_id AS c2 INTO @c2 FROM mlm_user_mst WHERE parent_id=a AND right_id>0 LIMIT 1;