2016-10-25 10 views
0

ちょうど私は、MySQLの内部で(行の2)\ n個の\ nの数をカウントする関数を作成し、diferentエイリアス数と分割

何かのようにそれを分割することができますか疑問:

FUNCTION 

SELECT COUNT ('paragraphs of a text_field, "\n\n"') AS PRG 
FROM database 
WHERE field_name LIKE '%text%' 

WHILE counter < PRG THEN SELECT SUBSTRING_INDEX (text_field, '\n\n', 1) 
AS C+counter END WHILE 

END FUNCTION; 
出力は3段落テキストの場合、この

のようなものでなければなりません

:5の場合

C1   |C2   |C3 
Paragraph 1 |Paragraph 2 |Paragraph 3 

段落テキスト:(もとMySQL)

C1   |C2   |C3   |C4   |C5 
Paragraph 1 |Paragraph 2 |Paragraph 3 |Paragraph 4 |Paragraph 5 
+0

のように私はあなたが 'パラグラフ4およびパラグラフを意味推測、ストアドプロシージャだろう5'? –

答えて

0

MariaDBは、スプリットとピボットをサポートしていません - あなたはあなたのアプリケーションで計算を行う場合、それはより速く確かです。

純粋MariaDB/MySQLのソリューションは、

CREATE PROCEDURE xyz() 
BEGIN 
    SELECT CHAR_LENGTH(field_name) - CHAR_LENGTH(REPLACE(field_name,"\n\n","")) INTO @a FROM mytbl WHERE fieldname='yourvalue'; 
    SET @i=1; 
    SET @query="SELECT "; 
    REPEAT 
    SET @query= CONCAT(@query, ' REPLACE(substring_index(field_name, "\n\n", ',@i,'), SUBSTRING_INDEX(field_name,"\n\n", ',@i-1,'), "") AS C',@i,''); 
    IF @i < @a THEN 
     SET @query=CONCAT(@query, ","); 
    END IF; 
    SET @[email protected]+1; 
    UNTIL @i > @a END REPEAT; 
    SET @query=CONCAT(@query, " FROM mytbl WHERE field_name='yourvalue'"); 
    PREPARE my FROM @query; 
    EXECUTE my; 
END 
+0

Perl: '@paras = split(" \ n \ n "、$ str);'はるかに少ない作業です。 PHPも1-linerです。 –