2010-08-31 6 views
0

J'ai une colonne enregistrée comme LONGTEXT sur mysql. Ce texte enregistre du texte enrichi. Je suis en train de lire tout le texte puis de le corriger en utilisant javascript pour obtenir les premiers caractères 100 de manière à ne pas diviser le mot en son milieu.Comment sélectionner une partie d'un texte sur mysql?

Pourtant, cette façon ne semble pas la meilleure façon de le faire. Je veux sélectionner un résumé directement en utilisant la requête, mais je veux aussi faire attention à ne pas inclure les caractères qui sont des balises html.

La fonction ci-dessous semble fonctionner correctement pour enlever le code HTML.

SET GLOBAL log_bin_trust_function_creators=1; 
DROP FUNCTION IF EXISTS fnStripTags; 
DELIMITER | 
CREATE FUNCTION fnStripTags(Dirty varchar(4000)) 
RETURNS varchar(4000) 
DETERMINISTIC 
BEGIN 
    DECLARE iStart, iEnd, iLength int; 
    WHILE Locate('<', Dirty) > 0 And Locate('>', Dirty, Locate('<', Dirty)) > 0 DO 
    BEGIN 
     SET iStart = Locate('<', Dirty), iEnd = Locate('>', Dirty, Locate('<', Dirty)); 
     SET iLength = (iEnd - iStart) + 1; 
     IF iLength > 0 THEN 
     BEGIN 
      SET Dirty = Insert(Dirty, iStart, iLength, ''); 
     END; 
     END IF; 
    END; 
    END WHILE; 
    RETURN Dirty; 
END; 
| 
DELIMITER ; 

Répondre

0

partie de la solution consiste à sélectionner le texte utilisé dépouillé

Ceci est la fonction mysql comme la fonction php strip_tags

DROP FUNCTION IF EXISTS htmlStrip; 
CREATE FUNCTION htmlStrip(pmXml longtext)RETURNS longtext 
DETERMINISTIC 
htmlStrip: 
BEGIN 
     DECLARE vStart INTEGER ; 
    DECLARE vEnd INTEGER ; 
    DECLARE vResult LONGTEXT; 
    DECLARE vCount1 INTEGER; 
    DECLARE vCount2 INTEGER; 

    SET vResult:=pmXml; 
    SET vCount1:=LENGTH(vResult)-LENGTH(REPLACE(vResult,'<','')); 
    SET vCount2:=LENGTH(vResult)-LENGTH(REPLACE(vResult,'>','')); 
    IF vCount1<>vCount2 THEN 
       RETURN 'Input Error'; 
    END IF; 

    WHILE (LOCATE('<',vResult) OR LOCATE('>',vResult)) DO 
     SET vStart:=LOCATE('<',vResult); 
     SET vEnd:=LOCATE('>',vResult); 
     SET vResult:=REPLACE(vResult,SUBSTRING(vResult,vStart,vEnd-vStart+1),''); 
    END WHILE; 
    RETURN vResult; 
END; 

    SELECT htmlStrip('<html>hello<body> how r u?</body></html>') AS Result 

Result 
-------- 
hello how r u? 

donc vous devez utiliser substring + strip_tags

+0

Etes-vous sûr de cette fonction? Je l'ai essayé et cela a pris du temps et il n'a pas donné de résultat jusqu'à maintenant, comme s'il entrait en boucle infinie. – Luci

+0

je prends cette fonction des commentaires du site mysql je lie à cette page: http://dev.mysql.com/doc/refman/5.0/fr/string-functions.html, il exécute cette fonction et obtenir des résultats, quelle est la taille de votre domaine? –

+0

vous pouvez regarder une autre fonction de tags de bande dans le web, j'ai trouvé un autre dans http://www.artfulsoftware.com/infotree/queries.php?&bw=1280 ou dans http://www.discussweb.com/database-support/ 4575-how-strip-html-tags-mysql.html –

Questions connexes