Mysql 无法从存储过程的结果表中删除值

Mysql 无法从存储过程的结果表中删除值,mysql,variables,stored-procedures,Mysql,Variables,Stored Procedures,我有这个存储过程,直到某个点为止 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.U

我有这个存储过程,直到某个点为止

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
),类似于这样:
vResultTable(ID)

然后,我有以下3个表,用于跨表获取数据:
文件(FileID、FileName、PathID、Dir)
路径(PathID,Path)
关键词1(文件ID,字段136)

结果表(vResultTable)基本上只是一个文件ID列表。其中一些文件ID在关键字1表中有一列(字段136)的值为“Prep”。这些ID可能是文件或目录。如果它们是文件,那么问题就不存在了,因为我找到了精确的匹配项,并且能够从结果表中删除这些ID。我面临的问题是当这些ID是目录时,因为我需要删除其中一个文件夹中的所有文件(Field136列中没有值),这些文件夹在关键字1.Field136中有值“Prep”。 我尝试创建一个临时表,存储所有具有“Prep”值的文件/目录的ID,然后尝试循环,但它不起作用。 当涉及到具有值“Prep”的文件时,上面的SP可以工作,但是如果有一些文件的ID不是“Prep”的直接值,但它们包含在具有该值的目录中,则我无法将其删除

前。 vResultTable(IDs)
5即使使用递归结构,也会造成混乱。我们是否可以假设Lot1作为一个目录名是唯一的,即它在任何其他路径中都不出现?e、 g./Xinet_Volume/Images/Others/Lot1/Folder2/wobbly.gif不幸不是。Lot1可能位于另一个文件夹结构上,如/Xinet_Volume/Documents/Countries/Lot1/flags/uk.pngy我认为您需要更改路径表。也许让它成为自我参照。所以路径是A、A/B、A/B/C等等,然后您可以区分一个路径中的Lot1和另一个路径中的Lot1。这样,您就可以找到一个查询,该查询查找文件表中存在(或不存在)带有标志值的所有路径。不过还是很乱。