0
我正在使用以下查询来更新特定主题的所有子项。用户定义函数SQL查询中的MySQL IN子句
UPDATE topics SET reuse = 0 WHERE topic_id IN (SELECT GetChildTopics(187));
凡
SELECT GetChildTopics(187);
返回“188190189”,但我的更新查询更新,而不是只更新第一个主题只有先用topic_id = 188行,它应该更新所有3个主题。
当我手动设置值时,它工作正常。
UPDATE topics SET reuse = 0 WHERE topic_id IN (188,190,189);
任何人都可以提出什么问题我在这里做什么?
这里是GetChildTopics MySQL函数
CREATE DEFINER=`root`@`localhost` FUNCTION `GetAncestry`(GivenID INT) RETURNS varchar(1024) CHARSET latin1
DETERMINISTIC
BEGIN
DECLARE rv VARCHAR(1024);
DECLARE cm CHAR(1);
DECLARE ch INT;
SET rv = '';
SET cm = '';
SET ch = GivenID;
WHILE ch > 0 DO
SELECT IFNULL(parent_topic_id,-1) INTO ch FROM
(SELECT parent_topic_id FROM topic_list WHERE id = ch) A;
IF ch > 0 THEN
SET rv = CONCAT(rv,cm,ch);
SET cm = ',';
END IF;
END WHILE;
RETURN rv;
END
返回函数的字符串 '188190189' 或3只记录一个结果? – Frank
更好的分享你的'GetChildTopics'函数 – 1000111
@Frank函数返回一个逗号分隔的字符串 –