0

重複の可能性:
MySQL クエリでフィールドを分割/展開できますか?


私はmysqlプロシージャでphp爆発関数を変換したいのですが
、爆発関数には長さが含まれていません(区切り文字がどのインデックスに来るかわかりません)そして、
展開された配列で、ループ
に書いたphpコードのようにループを実行しますその分解された配列

PHPコード

$data = 'Computers|Personal Computer|Home Use|Accessories|Mouse|Wireless Mouse';    

$categories = explode("|", $data);

for ( $i = 0; $i < sizeof($categories); $i++ ){

      $this->insert_category( $categories[$i] );
}

以下の関数をmysqlで使用しましたが、単一の値のみを返しますが、配列が必要であり、この関数は特定のインデックスを必要としますが、データは任意の型になるため、私の場合は不明です。
Mysql

CREATE FUNCTION SPLIT_STR(  
   x VARCHAR(255),  
   delim VARCHAR(12),  
   pos INT  
 )


RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),  
   LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),  
   delim, '');  

また、これらの関数を使用して結果に近づけましたが、関数が正しく動作していません。たとえば、正しく分割されていない、正しいインデックスが返されていないなどです。

以下のすべての機能を 1 つずつ、またはすべてを同時にではなく組み合わせて使用​​しています

SET temp2 = substring_index(data_mysql, '|', 2);  
SET temp2 = find_in_set('|', data_mysql);  

SET temp2 = instr(data_mysql, '|');  
SET temp3 = SPLIT_STR(data_mysql, '|', temp2 );  

mysql プロシージャで変数を次のように宣言しました。

DECLARE data_mysql           VARCHAR(200) DEFAULT NULL;  
DECLARE temp1                VARCHAR(150) DEFAULT NULL;  
DECLARE temp2                VARCHAR(150) DEFAULT NULL;  
DECLARE temp3                VARCHAR(150) DEFAULT NULL;  
4

0 に答える 0