2016-06-28 64 views
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 
+0

返回函数的字符串 '188190189' 或3只记录一个结果? – Frank

+1

更好的分享你的'GetChildTopics'函数 – 1000111

+0

@Frank函数返回一个逗号分隔的字符串 –

回答

1

试试这个代码;)

UPDATE topics SET reuse = 0 WHERE FIND_IN_SET(topic_id, GetChildTopics(187));