我正在尝试重写我的代码,用于搜索从PHP到MySQL存储过程的文本中的关键字,因为PHP的memory_limit太低而且我在共享主机上,所以我无法更改内存限制。
我需要编码的是这个(aho-corasick算法):
for every char ch in text do
do some transitions
if there is a result for a given state add it to the output (output is position of word in text and keyword)
我不希望任何人编写该程序,但我想知道是否可以追加结果,就像我在上面的伪代码中写的那样。
注意:我阅读了文档:http://www.peregrinesalon.com/wp-content/uploads/2009/03/mysql-stored-procedures.pdf并且循环很容易编程,条件也很容易,状态之间的转换可能很慢,但似乎仍然可能。
感谢您的回答!
答案 0 :(得分:7)
在SP中,您可以在临时表中构建结果集,并在退出之前操作它。然后调用程序可以从那里选择它想要的东西。一旦MySQL会话关闭,临时表也将被清除。
(编辑) http://dev.mysql.com/tech-resources/articles/mysql-storedprocedures.html
CREATE PROCEDURE procedure1
BEGIN
-- create 'results' table
CREATE TEMPORARY TABLE OUT_TEMP( val0 varchar(20), val1 int);
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b INT;
DECLARE cur1 CURSOR FOR SELECT val0, val1 FROM <another table>;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
--open table to read from
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO a, b;
IF done THEN
LEAVE read_loop;
END IF;
IF <some condition> THEN
INSERT INTO OUT_TEMP VALUES (a,b);
ELSE
-- insert something else
INSERT INTO OUT_TEMP VALUES (a,b + 10);
END IF;
END LOOP;
CLOSE cur1;
-- output results
SELECT * FROM OUT_TEMP;
DROP TEMPORARY TABLE OUT_TEMP;
END