Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中,有没有比这更干净的方法将多个分隔字符串转换成一个表?_Mysql_String - Fatal编程技术网

在MySQL中,有没有比这更干净的方法将多个分隔字符串转换成一个表?

在MySQL中,有没有比这更干净的方法将多个分隔字符串转换成一个表?,mysql,string,Mysql,String,通常会出现这样的情况,例如,web表单输入会导致几个长度相同的数组,其中每个数组都是不同的变量,需要包含在查询的特定部分中。假设你有 set@transforms=“a,b,c”;set@bys=“colX,colY,colZ” …而你想要 +------+---+------+ | row | x | x | +------+---+------+ | 1 | a | colX | | 2 | b | colY | | 3 | c | colZ | +------+-

通常会出现这样的情况,例如,web表单输入会导致几个长度相同的数组,其中每个数组都是不同的变量,需要包含在查询的特定部分中。假设你有

set@transforms=“a,b,c”;set@bys=“colX,colY,colZ”

…而你想要

+------+---+------+
| row  | x | x    |
+------+---+------+
|    1 | a | colX |
|    2 | b | colY |
|    3 | c | colZ |
+------+---+------+
有没有这样做的最佳实践,或者至少是这类问题的名称?据我所知,它可能已经是ArtfulSoftware的一个例子,我只是不知道该找什么标题。我能想到的最好的方法是下面的代码,但我觉得我是在重新发明轮子,我宁愿用那些真正知道自己在做什么的人喜欢的方式来做。有什么建议吗?谢谢

DELIMITER ##
DROP PROCEDURE IF EXISTS twoarrays ##
CREATE PROCEDURE hs.twoarrays
-- example usage: 
-- call twoarrays('array1','array2','delim1','delim2')
(
        IN array1   VARCHAR(2000),
        IN array2   VARCHAR(2000),
        IN delim1   VARCHAR(10),
        IN delim2   VARCHAR(10)
)
BEGIN
    IF delim1 is NULL THEN SET delim1 = ','; END IF;
    IF delim2 is NULL THEN SET delim2 = delim1; END IF;
    set @@group_concat_max_len = 99999;
    select @foo := concat("select @rowa := @rowa + 1 as row, '",
        replace(array1,delim1,"' x union select @rowa := @rowa + 1,'"),
        "' from (select @rowa := 0) r");
    select @bar := concat("select @rowb := @rowb + 1 as row, '",
        replace(array2,delim2,"' x union select @rowb := @rowb + 1,'"),
        "' from (select @rowb := 0) r");
    select @baz := concat("select a.*,b.x from (",
        @foo,
        ") a join (",
        @bar,
        ") b on a.row = b.row");
prepare twoarrayproc from @baz;
execute twoarrayproc;
END ## 
DELIMITER ; 

call twoarrays(@transforms,@bys,NULL,NULL);