多くの場合、Web フォームの入力結果が同じ長さの複数の配列になり、各配列はクエリの特定の部分に含める必要がある異なる変数になる場合があります。あなたが持っているとしましょう...
set @transforms = "a,b,c"; set @bys = "colX,colY,colZ";
...そしてあなたは...
+------+---+------+
| row | x | x |
+------+---+------+
| 1 | a | colX |
| 2 | b | colY |
| 3 | c | colZ |
+------+---+------+
これを行うためのベストプラクティス、または少なくともこのタイプの問題の名前はありますか? すでに ArtfulSoftware の例の 1 つになっている可能性があることはわかっていますが、どのタイトルを探すべきかわかりません。私が思いついた最良のコードは以下のコードですが、車輪を再発明しているように感じます。自分が何をしているのかを実際に知っている人が好む方法でやりたいと思います。助言がありますか?ありがとう。
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);