さまざまな基準に基づいてレコードを返す、かなり標準的な検索フォームがWebサイトにあります。各レコードが人に対応すると仮定しましょう。人は犬、車、どちらか、または両方を持つことができます。 2つのチェックボックスがあります。
[A]犬を連れている人のみ。
[B]車を持っている人のみ。
現在、これらはAND演算されます。つまり、両方をオフのままにすると、すべてのレコードが取得されます。 Aのみをチェックすると、犬を飼っている人(車を持っている場合も持っていない場合もある)のレコードのみが取得されます。 Bのみをチェックすると、車を持っている人(犬がいる場合といない場合があります)のレコードのみが取得されます。 A + Bの両方をチェックすると、車と犬を持っている人のレコードのみが取得されます。
要件により、ユーザーは犬を飼っている人OR車(または両方)を検索したい場合があります。両方のチェックボックスをオンにすると、どちらか一方しか持っていない人が除外されるためです。
ANDとORをきれいに共存させる方法についてのアドバイスはありますか?
代わりにラジオボタンを使用し、3つの選択肢を提供する必要がありますか?:
(A)犬を連れている人。
(B)車を持っている人。
(C)犬または車を持っている人。
編集:最初に、回答とコメントをありがとうございました。あなたは噛むために私にたくさんを与えました。抽象的な例をお詫び申し上げます。これが役立つ場合、これは患者のリストをプルアップして「働かせる」ことができるヘルスケアシステムです。この例では、犬と車はalertsおよびremindersに対応しています。警告は、患者が行うべきであったはずなのに行わなかったものです。リマインダーは、患者が将来必要とするものです。
アイデアは、アラートのあるすべての患者を検索し、各患者をプルアップして、アラートを「満たす」ためのデータを入力できることです(たとえば、患者は03/01/11に血液検査を受け、結果はXでした)。さらに、リマインダーのあるすべての患者を検索して、それらのデータを入力できます。両方を選択することができます。そうすることで、アラートとリマインダーの両方を持つ患者を取得できますが、どちらか一方しかない患者を見逃してしまいます。例ではこれらを抽象化して、選択が概念的に異なることは明らかであるが、同様の方法でやり取りされるようにしたかった(つまり、どちらも人の特性であるが、犬のような同じものの2つのタイプではない)と猫になります)。
以下に、各オプションについて提案する理由を示します(これらのいずれについても自由に異議を申し立ててください)。
[*]どちらもチェックしない:すべての患者が必要です。
[A]「アラートのある人のみ」のみのチェック:アラートの優先度が最も高いため、アラートのある患者に対処します。患者がリマインダーも持っている場合、それは問題ありません。あなたはそのリマインダーに対処することもしないこともできます。
[B]「リマインダーがある人のみ」のチェック:アポイントメントリストを作成するため、および/またはリマインダーを満たすデータを入力するために、リマインダーを持つ患者に対処する場合(たとえば、患者に血液検査のリマインダーがある場合)来月ですが、あなたはすでに昨日それを実行しました、そしてここにデータがあります)。
[AとB]両方のチェック:アラートとリマインダーのある患者に対処し、必要に応じてデータを入力できるようにします。また、将来的に患者が検査を行う必要があるため、予約をスケジュールします。
[A OR B](新しい要件)アラートまたはリマインダー(またはその両方)を使用して患者を表示したい:あらゆるタイプの注意または作業を必要とする患者を表示したいとします。
[A XOR B]これには理由がありませんが、完了のためにリストしています。
これらの3つのオプションしかない場合
コンボボックスまたはラジオボタンで3つの異なる選択肢-最後の1つを使用します。
()犬を連れている人()車を持っている人()犬か車を持っている人
その他のオプションについては、機能性と複雑さのトレードオフが異なるさまざまなソリューションがあります。
'上記すべて'
と人々
[]犬
[ ] 車
[]レーザーシャーク
[]上記すべて
これにより、ユーザーは基本的に、選択したすべてのオプションについて「OR」と「AND」を切り替えることができます。 「上記のすべて」には、ある程度の視覚的な距離が必要です。また、ラジオボタンで置き換えることもできます。
と人々
()すべて()すべて
[]犬
[ ] 車
[]レーザーシャーク
これは異なるセレクター(「1つのみ」など)を許可しますが、私にはもう少し複雑に見えます
プログレッシブリダクション用のフィルターバー
すべての結果を表示できる場合(つまり、帯域幅やサーバーの問題ではない場合)、最初にすべてのデータを表示し、次にフィルターオプションを追加できます。そんな感じ:
たとえば、 AND各列の制限、およびOR列ごとのオプション。列シラミAccessoriesの場合、値はSELECT DISTINCTクエリから派生した、ageのような列は、行を選択して「これより古い/より若い」を指定できるようにすることで最適に処理されます。
クエリビルダー
前に述べたように、無料のクエリビルダーは完全な柔軟性を提供しますが、ほとんどのカジュアルユーザーを怖がらせないものはありません。これらは優れた「高度な」オプションであり、一般的なクエリのためのいくつかのより簡単なUIと、以前に構成されたクエリを保存して呼び出す方法を求めます。
本当に4つのグループがあります:
[]犬はいるが車はない人
[]車を持っているが犬はいない人
[]犬と車の両方を持っている人
[]犬も車もない人
犬と車の例を見ただけでは、ユーザーが実際に何を探しているのかを推測するのは困難です。
2チェックボックスのアプローチはおそらくORを使用して機能するはずです
A)犬を連れている人
B)車を持っている人
ORを使用するこれらの2つのオプションは、次のようになります。
-Aのみがチェックされている場合、犬を連れている人
-Bのみがチェックされている場合、車を持っている人
-AとBの両方がチェックされている場合、犬や車を持っている人
-どちらもチェックされていない場合、すべての人
問題は、人々が犬と車を持っているかどうかを本当に知る必要があるかどうかです。
ファセット検索についても詳しく調べることをお勧めします。
クエリの一部であるかどうかに関係なく、各基準を明示的に示す必要があるだけだと思います。
このようにして、ユーザーは「犬を飼っている人」を検索すると、犬と車の両方を持っている人も含まれるかどうかについて疑いの余地はありません。
編集
この問題を指摘してくれた@Jeffに感謝します。車を持っているかどうかに関係なく、犬のいる人を選択できるようにするには、実際は次のようになります。
ユーザーが試行する検索の種類を選択するチェックボックスの上にドロップダウンを配置するのはどうですか-すべての基準(and)またはすべての基準(or)を探します:
最新-3つのラジオボタン。
選択肢が別の場合にチェックボックスを使用するのは間違っています。
さらに具体的に:
(A)犬を連れている人のみ。
(B)車を持っている人のみ。
(C)犬または車を持っている人。