1

ユーザーが送信したサイズ/数量のペアを満たすすべての製品を MySQL テーブルから選択する必要があります。

たとえば、私は

S  = 2
M  = 2
L  = 3
XL = 1

私は次のように2つの区切り文字列として取得しています:

S,M,L,XL 
2,2,3,1

私のデータベース クエリは現在、Coldfusion8 ページにあります。そこでは、両方の文字列から作成した 2 次元配列をループし、SELECT ステートメント内でループを実行します。

 <cfloop from="1" to="#array.length#" index="i">
 OR  ( size = <cfqueryparam cfsqltype="cfsql_varchar" value="#var.lotArray[i][1]#"> AND qty  >= <cfqueryparam cfsqltype="cfsql_varchar" value="#var.lotArray[i][2]#"> )
 </cfloop>

質問:
ストアド プロシージャの SELECT の中で MySQL でこれを行う方法はありますか? 文字列の長さと反復ごとに SELECT ONCE をループできると思いますが、これは多くの結果セットになり、これらをグループ化する方法がわかりません。正規表現も調べましたが、2 つの正規表現文字列と両方の文字列を関連付ける必要がある (M=2、L=3...) を SELECT する方法がわかりません。

ヒントをありがとう!

4

1 に答える 1

0

私はMySQLがあまり好きではありません...それは機能しないようです。私は、少なくとも次のようにELTを使用して変数名をループできることを望んでいました。

 ELT( loopcounter, passed_sizes )

loopcounterが1,2,3...から始まり、passed_sizesが'S'、'M'、'L'、'XL'のような文字列である場合、そのような要素を構築することもできないと思います。

だから私は過剰なコードの解決策をすることになった:

BEGIN
    SELECT art.a, art.v, art.c
    FROM arts AS art
    WHERE ( (filter = '') AND (1=1)
        OR art.d = filter
        )          
    AND ( (size_1 = '') AND (1=1) OR ( art.size = size_1 AND art.qty >= qty_1 ) )
    AND ( (size_2 = '') AND (1=1) OR ( art.size = size_2 AND art.qty >= qty_2 ) )
    AND ( (size_3 = '') AND (1=1) OR ( art.size = size_3 AND art.qty >= qty_3 ) )
    AND ( (size_4 = '') AND (1=1) OR ( art.size = size_4 AND art.qty >= qty_4 ) )
    AND ( (size_5 = '') AND (1=1) OR ( art.size = size_5 AND art.qty >= qty_5 ) )
    AND ( (size_6 = '') AND (1=1) OR ( art.size = size_6 AND art.qty >= qty_6 ) )
    AND ( (size_7 = '') AND (1=1) OR ( art.size = size_7 AND art.qty >= qty_7 ) )
    AND ( (size_8 = '') AND (1=1) OR ( art.size = size_8 AND art.qty >= qty_8 ) )
    AND ( (size_9 = '') AND (1=1) OR ( art.size = size_9 AND art.qty >= qty_9 ) )
    AND ( (size_10 = '') AND (1=1) OR ( art.size = size_10 AND art.qty >= qty_10 ) )
    GROUP BY art.a, art.v, art.c
    HAVING anzahl = length;
 END

2つの文字列の代わりに22個のパラメータを渡します。読みやすいですが、使いやすいループが恋しいです...誰かがもっと簡単な実装を知っているなら、答えとして投稿してください。ありがとう!

于 2012-06-20T22:34:39.990 に答える