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
文字列 '188190189' または3つのレコードを持つ結果セット関数を返しますか? – Frank
あなたの 'GetChildTopics'関数の共有を改善しました – 1000111
@Frank関数はコンマで区切られた値の文字列を返します –