2009-08-20 7 views
0

Ich mache ein MySql-Skript, die ein String-Feld in mehreren Worten zu brechen.MySql Feld Teilstrings

Ich brauche so etwas wie die Explode-Funktion in PHP!

Ich versuche die mysql substring_index Funktion, aber ich muss die Anzahl der Vorkommen der einen Teilzeichenkette erwarten. Und das ist in einer 10.000-Zeilen-Tabelle nicht vorhersehbar.

Irgendeine Einnahme?

das ist mein eigentlicher Stored Procedure:

**CREATE PROCEDURE `extract_words`() 
BEGIN 
DECLARE done INT DEFAULT 0; 
DECLARE result_row CHAR(100); 
DECLARE cursor_1 CURSOR FOR SELECT description FROM db_movies; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 


OPEN cursor_1; 


REPEAT 
    FETCH cursor_1 INTO result_row; 
    IF NOT done THEN 
    INSERT INTO extrator_words (word) VALUES (result_row); 
    END IF; 
UNTIL done END REPEAT; 


CLOSE cursor_1; 

END $$** 

Danke,
Pedro
@pcamacho

+0

Ich bezweifle, dass dies die Lösung Ihres eigentliches Problem ist. Was versuchst du zu erreichen? – soulmerge

+0

Ich möchte eine Tabelle mit allen Wörtern im Beschreibungsfeld erstellen, um einige SEO-Berichte zu erstellen, aber ich versuche das alles in Datenbank zu tun, ohne Skripte zu verwenden und in der minimal möglichen Anzahl von Abfragen – Pedro

Antwort

1
... 
SET @currText = textToExpolde; 
SET @sepLen = LENGTH(separator); 

WHILE @currText != '' DO 

    SET @word  = SUBSTRING_INDEX(@currText, separator, 1); 
    SET @currText = SUBSTRING(@currText, LENGTH(@word) + 1 + @sepLen); 

    INSERT INTO extractor_words SET word = @word; 

END WHILE; 
... 
+0

Danke aber! Wie aktualisierst du @currTail? – Pedro

+0

Sorry, das war ein Tippfehler, der sollte auch currText sein (behoben) =) – Zed

+0

Vielen Dank! Es funktioniert aber du hast einen kleinen Fehler statt SET @currText = SUBSTRING (@word, LENGTH (@word) + 1) + @ SepLen); ist: SET @ CurrText = SUBSTRING (@ CurrText, LÄNGE (@word) + 1 + @ SepLen); – Pedro