我有这个存储过程,它一直工作到某个点
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" 没有值并且不在 ant 目录中有值,所以可见
4 <--- "005.pdf" 与 ID=64 相同。
我已经尝试解决这个问题好几天了,但我已经筋疲力尽了。我已经用尽了所有的选择,我需要一个仁慈的人来帮助我解决这个问题。
谢谢阅读。