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

时间:2013-04-30 12:28:18

标签: 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.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个表来获取表格中的数据:
文件(FileID,FileName,PathID,Dir);
路径(PathID,路径);
keyword1(FileID,Field136);

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

EX。 vResultTable(ID) 5< ---“image1.jpg”有关键字1.Field136 =“准备”如此删除没有问题

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

2< ---“house.pdf”没有值,不在具有值的ant目录中,所以它是可见的

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

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

感谢阅读。

0 个答案:

没有答案