私はmysqlでいくつかの作業を行っており、唯一の解決策が可能なすべての組み合わせを定義することであるという独特の状況にあります。これを行うためのより簡単な/より良い方法があるかどうか疑問に思っています。
この sql は mpgs の 5 つのカテゴリを作成します
SELECT
count(if(a.mpgcombined < 18, a.mpgcombined, NULL)) as under18,
count(if(a.mpgcombined >= 18 AND a.mpgcombined <= 23, a.mpgcombined, NULL)) as under24,
count(if(a.mpgcombined > 23 AND a.mpgcombined <= 28, a.mpgcombined, NULL)) as under29,
count(if(a.mpgcombined > 28 AND a.mpgcombined <= 35, a.mpgcombined, NULL)) as under36,
count(if(a.mpgcombined > 35, a.mpgcombined, NULL)) as over35
FROM styles a, jpgs b, models c, divisions d
WHERE d.divisionid = c.divisionid
AND a.styleid = b.styleid
AND c.modelid = a.modelid
AND a.mktclassid in ($this->mktclassids)
$this->where
AND a.sequence = 0;
これらのカテゴリとそこにあるカウントは、一連のチェックボックスとしてユーザーに表示されますが、カウントが 0 より大きい場合のみです。
その後、ユーザーは必要な数のカテゴリ範囲を選択できます。
私が遭遇した問題は、ユーザーが 18 歳未満と 24 歳未満を選択した場合、次のような where 句が機能しないことです。
AND a.mpgcombined < 18 AND a.mpgcombined >= 18 AND a.mpgcombined <= 23
これは明らかに機能します:
AND a.mpgcombined <= 23
これは動的であるため、どこの条件がどうなるかわからないため、最初のオプションのようなものを使用すると、考えられるシナリオごとに sql を定義する必要がなくなります。
とにかく、考えられるすべての組み合わせに対してSQLを定義する必要がないということはありますか? SQLは私の強みではありません。
このクエリがその where 句で意味をなさないと考えている場合は、ユーザーが mpg を選択した場合にこの SQL が呼び出されないことを心配しないでください。無効になりますが、where 句は他のいくつかのクエリに適用されます。
18歳未満、36歳未満、35歳以上が選択された場合、SQLを生成するにはどうすればよいですか?? ユーザーは任意の組み合わせを選択できます。
これは私が念頭に置いていることです...基本的に、考えられるシナリオごとにifステートメントとelseifステートメントが49個程度です。
if(under18 && under24)
$where = 'AND a.mpgcombined <= 23';
elseif (under29 && under18....)
私が考えていることのイメージをつかむことができます。