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

基本上我有一个临时表作为参数 IN (称为vResultTable)传递给存储过程,如下所示:
vResultTable(ID);

然后我有以下 3 个表,它们涉及跨表获取数据:
File( FileID, FileName, PathID, Dir );
路径(PathID,路径);
关键字 1(文件 ID,字段 136);

结果表 (vResultTable) 基本上就是一个文件 ID 列表。其中一些文件 ID 在keyword1 表中有一个值为“Prep”的列(Field136)。这些 ID 可能是文件或目录。如果它们是文件,则问题不存在,因为我找到了完全匹配并且我能够从结果表中删除这些 ID。我面临的问题是当这些 ID 是目录时,因为我需要删除所有文件(在 Field136 列中没有值)在关键字 1.Field136 中具有值“Prep”的文件夹之一内。我尝试创建一个临时表,存储具有“Prep”值的文件/目录的所有 ID,然后尝试循环,但它不起作用。上面的 SP 适用于具有“Prep”值的文件,

前任。vResultTable (IDs) 5 <--- "image1.jpg" 有 keyword1.Field136 = "Prep" 所以删除没有问题

64 <--- "anchor.png" 没有值,但它的完整路径是 "/Xinet_Volume/ Images/Lot1/Folder1/anchor.png" 目录 "Lot1" 有关键字 1.Field136 = "Prep" 因此这个文件应该从结果表中删除

2 <--- "house.pdf" 没有值并且不在 a​​nt 目录中有值,所以可见

4 <--- "005.pdf" 与 ID=64 相同。

我已经尝试解决这个问题好几天了,但我已经筋疲力尽了。我已经用尽了所有的选择,我需要一个仁慈的人来帮助我解决这个问题。

谢谢阅读。

4

0 回答 0