referrals
親子関係を含むテーブルで作業しています
親を取得する必要があります->子供->子供-> ....
上記のテーブルデータの場合、私の望ましい結果は
SOF からいくつかのコードを見たことがありますが、それらがどのように機能しているかを理解できず、頭の中で非常に簡単なロジックで自分自身を試してみましたが、残念ながら奇妙な理由で機能していません
そのためのストアド プロシージャを作成しましたが、問題で立ち往生しています。IN CLAUSE
DELIMITER $$
DROP PROCEDURE IF EXISTS `GetHierarchy3`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `GetHierarchy3`()
BEGIN
DECLARE idss VARCHAR(225);
SET @currentParentID := 999999;
SET @lastRowCount := 0;
## A ##
INSERT INTO referrals_copy SELECT * FROM referrals WHERE uid1 = @currentParentID;
SET @lastRowCount := ROW_COUNT();
## B ##
SELECT GROUP_CONCAT(uid2) INTO @idss FROM referrals WHERE uid1 = @currentParentID;
#SELECT @lastRowCount;
SELECT * FROM referrals_copy;
WHILE @lastRowCount > 0 DO
SELECT "here";
SELECT @idss;
## C ##
INSERT INTO referrals_copy SELECT uid1, uid2 FROM referrals
WHERE uid1 IN (@idss);
SET @lastRowCount := ROW_COUNT();
#set @ids := NULL;
SELECT @idss;
SELECT GROUP_CONCAT(uid2) FROM referrals WHERE uid1 IN (@idss);
SELECT @idss;
SET @lastRowCount := 0;
END WHILE;
-- return the final set now
SELECT
*
FROM referrals_copy;
END$$
CALL GetHierarchy3();
最初に、最初のクエリで必要なメインの親の子を取得し、A
正常に動作します
次に、メインの親の子を変数@idss
queryに取得し、B
正常に動作します
次に、ループでクエリの変数を使用しidss
て子クエリを取得C
し、結果のテーブルに配置します...これは問題のある部分です
ここで、テーブルに値を挿入する必要が1111,2222
ある変数にある最初の反復では、 ieの子のみを配置しますが、そうではありませんidss
{3333, 4444} child of 1111, and {5555} child of 2222
1111
3333,4444
5555
C
変数をクエリからチェックに置き換えようとしましたが、1111,2222' within
Claues`の値で問題なく動作しました
IN句がグループ連結からコンマ区切りの値を受け入れない理由、またはこのコードを修正するためのアイデア
よろしく