Как добавить результаты в набор результатов хранимой процедуры MySQL? - PullRequest
3 голосов
/ 29 мая 2011

Я пытаюсь переписать свой код для поиска ключевых слов в тексте из 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 и цикл легко программировать, условия также просты, переходы между состояниями могут быть медленными, но это все еще возможно.

Спасибо за ответ!

1 Ответ

7 голосов
/ 29 мая 2011

В SP вы можете построить свой набор результатов во временной таблице и манипулировать им так, как вы хотите, прежде чем выйти. Затем вызывающая процедура может выбрать, что она хочет оттуда. После закрытия сеанса MySQL временная таблица также будет очищена.

(EDIT) 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...