2016-06-28 10 views
0

次のクエリを使用して、特定のトピックのすべての子を更新しています。ユーザー定義関数を使用したSQLクエリのMySQL IN句

UPDATE topics SET reuse = 0 WHERE topic_id IN (SELECT GetChildTopics(187)); 

SELECT GetChildTopics(187); 

戻っ「188190189」が、私の更新クエリではなく、唯一の最初のトピックを更新する、それはすべての3つのトピックを更新する必要があり、topic_id = 188で最初の行だけを更新しています。

値を手動で入力するとうまく動作します。

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)); 
関連する問題