web-dev-qa-db-fra.com

Quelle est une manière propre d'implémenter deux cases à cocher qui peuvent être "ET" ou "OU"?

J'ai un formulaire de recherche assez standard sur un site Web qui retournera des enregistrements basés sur divers critères. Supposons que chaque enregistrement correspond à une personne. Une personne peut avoir un chien, une voiture, ni l'un ni l'autre, ou les deux. Il y a deux cases à cocher:

[A] Uniquement les personnes avec des chiens.
[B] Uniquement les personnes avec des voitures.

Actuellement, ce sont ANDed. Autrement dit, si vous ne cochez pas les deux, vous obtiendrez tous les enregistrements. Si vous ne cochez que A, vous n'obtiendrez que les dossiers des personnes ayant des chiens (ils peuvent ou non avoir des voitures). Si vous cochez uniquement B, vous n'obtiendrez que les dossiers des personnes ayant des voitures (elles peuvent ou non avoir des chiens). Si vous cochez les deux A + B, vous obtiendrez uniquement des enregistrements pour les personnes ayant des voitures ET ayant des chiens.

Les exigences dictent maintenant que les utilisateurs peuvent vouloir rechercher des personnes ayant des chiens OR voitures (ou les deux)), car la vérification des deux cases exclura les personnes qui n'ont que l'un ou l'autre.

Des conseils sur la façon de permettre à AND et OR de coexister proprement?

Dois-je plutôt utiliser des boutons radio et proposer trois choix?:

(A) Les personnes avec des chiens.
(B) Les gens avec des voitures.
(C) Les personnes avec des chiens ou des voitures.

EDIT: Tout d'abord, merci à tous pour les réponses et commentaires; vous m'avez beaucoup donné à mâcher. Je m'excuse pour l'exemple abstrait - si cela aide, c'est le système de soins de santé qui vous permet de dresser des listes de patients pour "travailler". Les chiens et les voitures, dans cet exemple, correspondent à alertes et rappels. Une alerte est quelque chose que le patient aurait dû faire mais n'a pas fait. Un rappel est quelque chose dont le patient aura besoin à l'avenir.

L'idée est que vous pouvez rechercher tous les patients avec des alertes, afficher chaque patient et saisir des données pour "satisfaire" l'alerte (par exemple, le patient a subi un test sanguin le 03/01/11 avec un résultat de X). De plus, vous pouvez rechercher tous les patients avec des rappels et saisir des données pour ceux-ci. Vous pouvez choisir les deux, et ce faisant, vous obtiendrez des patients qui ont les DEUX alertes et rappels, mais vous manquerez alors des patients qui n'ont que l'un ou l'autre. Je voulais les résumer dans l'exemple afin qu'il soit clair que les choix sont conceptuellement différents, mais interagissent de manière similaire (c'est-à-dire qu'ils sont tous deux des propriétés de la personne, mais ce ne sont pas deux types de la même chose que les chiens et les chats le seraient).

Voici mes raisons proposées pour chaque option (n'hésitez pas à contester l'une d'entre elles):

[*] Vérification non plus: vous voulez tous les patients.

[A] Cochez uniquement "uniquement les personnes avec des alertes": vous souhaitez adresser les patients avec des alertes, car celles-ci sont de la plus haute priorité. Si un patient a également un rappel, c'est bien; vous pouvez ou non répondre à ce rappel.

[B] Cochez uniquement "uniquement les personnes avec des rappels": vous souhaitez adresser des patients avec des rappels parce que vous souhaitez créer une liste de rendez-vous et/ou saisir des données qui satisferaient le rappel (par exemple, le patient a un rappel pour un test sanguin le mois prochain, mais vous l'avez déjà fait hier, et voici les données).

[A ET B] Vérification des deux: vous souhaitez vous adresser aux patients qui ont des alertes et des rappels afin que vous puissiez saisir des données si nécessaire, et également planifier des rendez-vous parce que les patients ont besoin d'un test à l'avenir.

[A OR B] (La nouvelle exigence) Vouloir voir des patients avec des alertes ou des rappels (ou les deux): Vous voulez voir des patients qui nécessitent N'IMPORTE QUEL type d'attention ou de travail.

[A XOR B] Je ne vois aucune raison à cela, mais je le répertorie pour l'achèvement.

10
Glenn Arndt

si vous n'avez que ces trois options

aller avec votre dernier - trois choix distincts dans une zone de liste déroulante ou des boutons radio.

() personnes avec chiens () personnes avec voitures () personnes avec chiens ou voitures

Pour plus d'options, il existe différentes solutions avec différents compromis fonctionnalité/complexité:

'Tout ce qui précède'

Gens avec
[ ] chiens
[ ] voitures
[] laser lasers
[] tout ce qui précède

Cela permet à l'utilisateur de basculer entre "OU" et "ET" pour toutes les options sélectionnées. "Tout ce qui précède" devrait obtenir une certaine distance visuelle. Il pourrait également être remplacé par des boutons radio:

Gens avec
() tout () tous
[ ] chiens
[ ] voitures
[] laser lasers

Cela permettrait différents sélecteurs (tels que "un seul de"), mais me semble un peu plus compliqué

Barre de filtre pour réduction progressive

Si vous pouvez afficher tous les résultats (c'est-à-dire que ce n'est pas un problème de bande passante/serveur), vous pouvez d'abord afficher toutes les données, puis ajouter des options de filtre, par exemple quelque chose comme ca:

enter image description here

Ce qui serait par exemple ET les restrictions de chaque colonne, et OR les options par colonne. Pour les poux de colonne Accessoires , les valeurs peuvent être dérivée d'une requête SELECT DISTINCT, une colonne comme l'âge est mieux gérée en permettant de choisir une ligne et de spécifier "" plus ancien/plus jeune que cela ".

Constructeurs de requêtes

Les constructeurs de requêtes gratuits, comme mentionné précédemment, offriront une flexibilité totale - pourtant je n'en ai vu aucun qui n'effraierait pas la plupart des utilisateurs occasionnels. Ils sont une bonne option "avancée", demandant une interface utilisateur plus facile pour les requêtes courantes, et une méthode pour stocker et rappeler les requêtes précédemment configurées.

6
peterchen

Il y a vraiment 4 groupes:
[] Les gens avec des chiens, mais pas avec des voitures
[] Des gens avec des voitures, mais pas des chiens
[] Personnes avec chiens et voitures
[] Personnes sans chien ni voiture

Il est difficile de deviner ce que l'utilisateur recherche réellement en ne regardant que l'exemple du chien et de la voiture.

L'approche à 2 cases à cocher devrait probablement fonctionner avec un OU
A) Personnes avec chiens
B) Les gens avec des voitures
Ces 2 options en utilisant OR vous donnera:
- lorsque seul A est coché, les personnes avec des chiens
- lorsque seul B est coché, les personnes avec des voitures
- lorsque les deux A et B sont vérifiés, les personnes avec des chiens ou des voitures
- lorsque ni l'un ni l'autre n'est vérifié, toutes les personnes

La question est de savoir si vous avez vraiment besoin de savoir si les gens ont un chien ET une voiture.

Je suggère également d'examiner de plus près la recherche à facettes.

5
Geert

Je pense que vous avez juste besoin de montrer explicitement pour chaque critère si cela fait partie de la requête ou non:

enter image description here

De cette façon, l'utilisateur n'a aucun doute quant à savoir si la recherche de "personnes avec des chiens" inclura également les personnes qui ont à la fois des chiens et des voitures.

ÉDITER

Merci à @Jeff d'avoir signalé le problème. Cela devrait en fait ressembler à ceci, pour permettre la sélection de personnes avec des chiens, qu'ils aient ou non une voiture:

enter image description here

5
Vitaly Mijiritsky

Qu'en est-il de mettre une liste déroulante au-dessus des cases à cocher où l'utilisateur sélectionne le type de recherche à essayer - en recherchant TOUS les critères (et) ou N'IMPORTE QUEL des critères (o):

enter image description here

4
Bevan

Le dernier - trois boutons radio.

Utiliser la case à cocher lorsque les choix sont alternatifs est incorrect.

Je serais également plus précis:

(A) Uniquement les personnes avec des chiens.

(B) Seules les personnes avec des voitures.

(C) Les personnes avec des chiens ou des voitures.

0
franz976