web-dev-qa-db-ja.com

WebベースのSQLクエリビルダー

一連のドロップダウンリストを使用して単純なWebベースのクエリビルダーを作成し、入力された入力のみが最終的な値フィールドになるようにしました。

enter image description here

上記の例では、フィルターを連続して追加するだけでは目的の結果セットが生成されず、各「OR」句をグループ化する必要があります。

ユーザーにグループを定義/表示/編集するためのsimpleインターフェイスを提供する方法を考え出すのに苦労しています。 AND = ORフィルターの順序のみに基づいて(現在のインターフェイスを使用して)フィルターグループを推測することはできません考えていません。それは...ですか?

3
Red Taz

ゲシュタルト のグループ化の原則 を見て、アイデアを得ることができます。これらの原則に従うことは、とりわけ、使用することを意味する可能性があります:

  • Identationネストされたクエリの感覚を与えるために@ethrbunnyによって言及されたように、

  • <hr>条件をグループ化します(つまり、すべての行から削除し、グループの開始と終了の場所のみを含めます)。

  • ANDまたはORだけを含む特別な行は、グループの開始位置を示すことができます。これは、ユーザーに「条件の追加」または「グループの追加」を与えることを想定しています。
  • クエリを保存クエリを許可します。これにより、クエリを別のクエリの条件として設定できるため、ユーザーは サブクエリのパイプライン

他の同様のアイデアが存在する可能性があります。お役に立てば幸いです。 :)

1
ekapros

インターフェースの再設計/変更は自由ですか?

その場合、制御オプションを事前定義された論理グループに分離することを検討しましたか?最も一般的なクエリを分離し、それらのUIを最適化すると、物事を少し単純化できるはずです。

このようにして、フィルターをポジティブ(含む)とネガティブ(含まない)の2つのグループに分割できます。

[ID]の商品を表示:40、88、102、144 ...(簡単にするために1行で表示)[タイトル]の商品を表示[等しい、含む、含まない]: "Foobar" [説明のある商品を除外] [等しい、含む、含まない]「テスト」[ID]の製品を除外:9、15、111

[]はドロップダウン選択を示します

バックエンドのロジック/クエリは次のようになります。

SELECT * FROM products WHERE (productID IN('40, 88, 102, 144') OR productTitle = 'Foobar') AND (productDescription != 'Test' OR productID NOT IN('9, 15, 111')

単純化するために、微調整されたフィルター/クエリを作成する機能を交換します。ほとんどの場合、これは、ツールのユーザーがフィルターが互いにどのように相互作用するかについての知識を持っていない場合に推奨されます。

1
tseven

リンクされたグループを示すために何らかのインデントがある場合はどうでしょうか?それらがインデントされたら、それらを選択してブロックの「AND/OR」をマークできます。

0
ethrbunny