MySQL: использование функции вывода с IN

0

У меня есть функция MySQL "GetChildren (id)", которая возвращает список идентификаторов, разделенных запятыми, которые являются дочерними элементами идентификатора, переданного функции.

Я хотел бы использовать вывод этой функции следующим образом:

SELECT * FROM table WHERE id IN (GetChildren(36))

и если id 36 имел идентификаторы детей 37,38 и 39, я бы получил эти три строки назад.

Однако происходит то, что я получаю только первый идентификатор.

У скрипта SQL, казалось, были трудности с функциями, но вот упрощенный пример, демонстрирующий проблему:

CREATE TABLE test (
  'ID' int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO test (ID) VALUES (1),(2),(3),(4);

DELIMITER $$

DROP FUNCTION IF EXISTS 'TestFN' $$
CREATE FUNCTION 'TestFN' (GivenID  VARCHAR(1024)) RETURNS varchar(1024) CHARSET latin1
DETERMINISTIC
BEGIN
  RETURN '2,3,4';
END $$
DELIMITER ;

После установки, если я запустил SELECT TestFN(1), я вернусь 2,3,4 как ожидалось.

Если я запускаю SELECT ID FROM test WHERE ID IN (TestFN1), я возвращаю только одну строку с идентификатором 2. То же самое происходит с SELECT ID FROM test WHERE ID = (TestFN1)

Есть ли способ использовать вывод этой функции для использования, как если бы я ввел идентификаторы в ID IN (...)?

Теги:

1 ответ

2

Я думаю, что MySQL должен будет поддерживать табличные функции, чтобы вы могли использовать их таким образом. В противном случае IN ведет себя так, как ожидалось, someInt IN (astring) список IN в ints, оценивая в вашем случае ID IN (2)

Тем не менее, вы, вероятно, можете использовать FIND_IN_SET способом, похожим на то, что вы пытаетесь.

Что-то вроде FIND_IN_SET(ID, GetChildren(36)) > 0

  • 0
    Это сработало! Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню