2011-05-29 3 views
3

J'essaye de réécrire mon code pour la recherche de mots-clés dans le texte de la procédure stockée de PHP à MySQL parce que PHP a memory_limit trop bas et je suis sur un hébergement partagé ainsi je ne peux pas changer la limite de mémoire.Comment ajouter des résultats au résultat d'une procédure stockée MySQL?

Ce que je dois code est ce (Aho-Corasick algorithme):

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) 

Je ne veux pas que quiconque d'écrire la procédure mais je voudrais savoir s'il est possible d'ajouter des résultats que je écrit en pseudo-code ci-dessus.

Note: J'ai lu le document: http://www.peregrinesalon.com/wp-content/uploads/2009/03/mysql-stored-procedures.pdf et pour le cycle est facile à programmer, les conditions sont faciles aussi, les transitions entre les états peuvent être lents, mais il semble encore possible.

Merci pour votre réponse!

Répondre

7

Dans un SP, vous pouvez créer votre jeu de résultats dans une table temporaire et le manipuler comme vous le souhaitez avant de quitter. Ensuite, la procédure d'appel peut sélectionner ce qu'elle veut à partir de là. Une fois la session MySQL fermée, la table temporaire sera également effacée.

(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 
+0

Merci! Pouvez-vous fournir un lien pour plus de détails? –

+0

voir en ligne - édité pour inclure (non testé) échantillon + lien – ethrbunny

+0

Une petite observation ici. J'ai une erreur de syntaxe pour créer la table temporaire. Comme la table temporaire est en cours de création en haut des déclarations declare. Il a dit l'erreur de syntaxe. Intéressant j'ai placé l'instruction de création après la création de curseur et cela a fonctionné parfaitement. Je ne sais pas quel pourrait être le problème. – Kiran

Questions connexes