1

特定の時点まで機能するこのストアドプロシージャがあります

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_RunSearchPostFilter`(vResultTable VARCHAR(64))
BEGIN
IF (SELECT COUNT(*) FROM groupuser u, groups g WHERE u.GroupID=g.GroupID AND g.GroupName REGEXP 'design_group' AND u.UserID=@vUserID) THEN

SET @prep=CONCAT("

    DELETE r FROM ", vResultTable, " r
    JOIN file f ON r.FileID = f.FileID
    JOIN path p ON f.PathID = p.PathID
    JOIN keyword1 k1 ON f.FileID = k1.FileID
    AND k1.Field136 = 'Prep'
    OR (
     *code to hide files within directories with k1.Field136="Prep"*
    )

;");

PREPARE sprep FROM @prep;
EXECUTE sprep;
DEALLOCATE PREPARE sprep;

END IF;
END

vResultTable基本的に、次のようなパラメーター IN (と呼ばれる)としてストアド プロシージャに渡される一時テーブルがあります

次に、テーブル間でデータを取得するために関与する次の 3 つのテーブルがあり
ます。
パス (PathID、パス);
キーワード 1 (ファイル ID、フィールド 136);

結果テーブル (vResultTable) は、基本的にファイル ID のリストにすぎません。これらのファイル ID の一部には、keyword1 テーブルに列 (Field136) があり、値は "Prep" です。これらの ID は、ファイルまたはディレクトリである可能性があります。それらがファイルである場合、問題はありません。正確に一致するものを見つけ、それらの ID を結果テーブルから削除できるからです。私が直面している問題は、これらの ID がディレクトリである場合です。keyword1.Field136 に「Prep」という値を持つフォルダーの 1 つにあるすべてのファイル (Field136 列に値を持たない) を削除する必要があるためです。一時テーブルを作成し、「Prep」値を持つファイル/ディレクトリのすべての ID を保存してからループしようとしましたが、機能しません。上記の SP は、値が「Prep」のファイルに関しては機能します。

元。vResultTable (IDs) 5 <--- "image1.jpg" has keyword1.Field136 = "Prep" なので問題なく削除

64 <--- "anchor.png" 値はありませんが、フル パスは "/Xinet_Volume/ Images/Lot1/Folder1/anchor.png" ディレクトリ "Lot1" には keyword1.Field136 = "Prep" があるため、このファイルは結果テーブルから削除する必要があります

2 <--- "house.pdf" 値がなく、ant ディレクトリ内にありません

4 <--- "005.pdf" ID=64 と同じ。

私はこの問題を何日も解決しようとしましたが、疲れ果てています。私はすべての選択肢を使い果たしました。これを手伝ってくれる慈悲深い人が必要です。

読んでくれてありがとう。

4

0 に答える 0