私は、次の列を持つテーブルa
を有する:
ID
name
はA_IDが別a
行のIDであるMySQLのルーチンは、変数に値を代入しませんか?
をA_ID。
私は、次の値を持つ3行があるとします。
1、 'NAME1'、
2ヌル、 '名前2'、1
3、 'NAME3'、2
[OK]を、今私を "name3 | name2 | name1" または一般にname
他の参照がなくなるまで別の行を参照する各行の値(文字で区切られます)を返すストアドプロシージャを作成する場合は、 。
次のコードに問題がありますか? SELECT @names
:
DELIMITER $$ CREATE PROCEDURE chain (IN init_name VARCHAR(100), OUT names VARCHAR(1000)) BEGIN DECLARE next_id INT default 0; DECLARE curr_id INT default 0; /* Just in case */ DECLARE n VARCHAR(100) default ""; SET n = init_name; SELECT a_id INTO next_id FROM a WHERE `name`=n; SET names = n; WHILE next_id <> NULL DO SET curr_id=next_id; /* Again, just in case */ SELECT `name`, a_id INTO n, next_id FROM a WHERE id=curr_id; SET names = CONCAT(names, "|", n); END WHILE; END$$
CALLチェーン( 'NAME3'、@namesは)単に "NAME3" あなたはあなたのプロシージャを呼び出した後@namesを読む必要が
(右
SET names ....
後)SPのボディにSELECT names
を行います。 申し訳ありませんがみんな、初心者のミス。 、あなたがNEXT_IDをテストしなければならない代わりにNEXT_ID <> NULLのためのテストの はい – ieeehh