重複の可能性:
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;