J'ai construit un simple générateur de requêtes basé sur le Web en utilisant une série de listes déroulantes telles que la seule entrée saisie est le champ de valeur finale.
Dans l'exemple ci-dessus, le simple fait d'ajouter des filtres consécutivement ne produirait pas le jeu de résultats souhaité, chacune des clauses "OR" devrait être regroupée.
J'ai du mal à trouver un moyen de fournir à l'utilisateur une interface simple pour définir/afficher/modifier des groupes. Je ne pense pas qu'il soit possible d'inférer des groupes de filtres (en utilisant l'interface actuelle) en fonction uniquement de l'ordre des filtres AND/OR. C'est ça?
Vous pouvez jeter un œil à la Gestalt principes de regroupement pour obtenir des idées. Suivre ces principes pourrait signifier utiliser, entre autres:
Identification comme mentionné par @ethrbunny pour donner une idée des requêtes imbriquées,
Utilisation du <hr>
pour regrouper les conditions (c'est-à-dire supprimer de chaque ligne, et inclure uniquement là où un groupe commence et se termine),
AND
ou un OR
pourrait indiquer où un groupe commence. Cela supposerait que vous donniez à l'utilisateur "ajouter une condition" ou "ajouter un groupe".D'autres idées similaires pourraient exister. J'espère que cela pourra aider! :)
Êtes-vous libre de repenser/changer l'interface?
Si oui, avez-vous envisagé de séparer les options de contrôle en groupes logiques prédéfinis? Si vous isolez les requêtes les plus courantes et optimisez l'interface utilisateur pour celles-ci, vous devriez pouvoir simplifier un peu les choses.
De cette façon, vous pouvez diviser les filtres en deux groupes, positifs (inclure) et négatifs (non compris):
Afficher les produits avec [ID]: 40, 88, 102, 144 ... (représentés par une seule ligne pour plus de simplicité) Afficher les produits avec [Titre] [égal, contenant, ne contenant pas]: "Foobar" Exclure les produits avec [description ] [égal, contenant, ne contenant pas] "Test" Exclure les produits avec [ID]: 9, 15, 111
[] indique une sélection déroulante
La logique/requête sur le backend ressemblerait à quelque chose comme:
SELECT * FROM products WHERE (productID IN('40, 88, 102, 144') OR productTitle = 'Foobar') AND (productDescription != 'Test' OR productID NOT IN('9, 15, 111')
Vous échangez la possibilité de créer des filtres/requêtes finement réglés pour plus de simplicité. Dans la plupart des cas, cela est préférable lorsque les utilisateurs de l'outil ne possèdent pas la connaissance de la façon dont les filtres interagissent les uns avec les autres.
Et si vous aviez une sorte d'indentation pour indiquer les groupes liés? Une fois en retrait, vous pouvez les sélectionner et marquer "ET/OU" pour le bloc.