it-swarm-eu.dev

Jaký je čistý způsob, jak implementovat dvě zaškrtávací políčka, která mohou být „ANDed“ nebo „ORed“?

Na webu mám docela standardní vyhledávací formulář, který vrátí záznamy na základě různých kritérií. Předpokládejme, že každý záznam odpovídá osobě. Člověk může mít psa, auto, ani obojí. Existují dvě zaškrtávací políčka:

[A] Pouze lidé se psy.
[B] Pouze lidé s auty.

V současné době jsou ANDED. To znamená, že pokud necháte oba nezaškrtnuté, získáte všechny záznamy. Pokud zaškrtnete pouze A, dostanete pouze záznamy pro lidi, kteří mají psy (mohou nebo nemusí mít auta). Pokud zaškrtnete pouze B, získáte pouze záznamy pro lidi, kteří mají auta (mohou nebo nemusí mít psy). Pokud zaškrtnete obě A + B, získáte pouze záznamy pro lidi, kteří mají auta a mají psy.

Požadavky nyní diktují, že uživatelé mohou chtít hledat lidi, kteří mají psy OR auta (nebo obojí), protože zaškrtnutí obou políček vyloučí lidi, kteří mají pouze jedno nebo druhé.

Nějaká rada, jak povolit souběhu AND a OR čistě koexistovat?

Měl bych místo toho jít s přepínači a nabídnout tři možnosti ?:

(A) Lidé se psy.
(B) Lidé s auty.
(C) Lidé se psy nebo auty.

EDIT: Nejprve děkuji všem za odpovědi a komentáře; dal jsi mi spoustu žvýkat. Omlouvám se za abstraktní příklad - pokud to pomůže, jedná se o systém zdravotní péče, který vám umožní vytáhnout seznamy pacientů na „práci“. Psi a auta v tomto příkladu odpovídají upozornění a připomenutí . Výstraha je něco, co měl pacient udělat, ale neudělal to. Připomenutí je něco, co bude pacient v budoucnu potřebovat.

Myšlenka je, že můžete vyhledat všechny pacienty s upozorněním, vytáhnout každého pacienta a zadat data, aby „uspokojila“ výstrahu (např. Pacient měl 3. ledna 2011 krevní test s výsledkem X). Kromě toho můžete vyhledat všechny pacienty s připomenutím a zadat pro ně data. Můžete si vybrat obojí, a tím získáte pacienty, kteří mají upozornění a připomenutí, ale pak vám budou chybět pacienti, kteří mají pouze jedno nebo druhé. Chtěl jsem je v příkladu shrnout tak, aby bylo jasné, že volby jsou koncepčně odlišné, ale vzájemně se ovlivňují podobným způsobem (tj. Oba jsou vlastnostmi osoby, ale nejsou to dva typy stejné věci jako psi). a kočky by byly).

Zde jsou mé navrhované důvody pro každou možnost (neváhejte a proti kterékoli z těchto námitek):

[*] Žádná kontrola: Chcete všechny pacienty.

[A] Kontrola pouze „pouze lidé s upozorněním“: Chcete oslovit pacienty s upozorněním, protože to je nejvyšší priorita. Pokud má pacient také připomenutí, je to v pořádku; tuto upomínku můžete nebo nemusíte řešit.

[B] Kontrola pouze „pouze lidé s připomenutím“: Chcete oslovit pacienty s připomenutím, protože chcete sestavit seznam schůzek a/nebo zadat data, která by splnila připomenutí (např. Pacient má připomenutí pro krevní test) příští měsíc, ale už jste to provedli včera a tady jsou data).

[A AND B] Kontrola obou: Chcete oslovit pacienty, kteří mají upozornění a připomenutí, abyste mohli v případě potřeby zadávat data, a také naplánovat schůzky, protože pacienti potřebují v budoucnu provést nějaký test.

[A OR B] (Nový požadavek) Chcete vidět pacienty s upozorněním nebo připomenutím (nebo oběma): Chcete vidět pacienty, kteří vyžadují ŽÁDNÝ typ pozornosti nebo práce.

[A XOR B] Nevidím pro to žádný důvod, ale uvádím jej pro dokončení.

10
Glenn Arndt

pokud máte pouze tyto tři možnosti

jít se svou poslední - tři různé možnosti v rozbalovacím seznamu nebo přepínači.

() lidé se psy () lidé s auty () lidé s psy nebo auty

Pro více možností existují různá řešení s různými funkcemi/složitostí kompromisu:

'Všechny výše uvedené'

Lidé s
[] psi
[] auta
[] lasersharks
[] všechny výše uvedené

To v podstatě umožňuje uživateli přepínat mezi „NEBO“ a „A“ pro všechny vybrané možnosti. „Všechny výše uvedené“ by měly získat určitou vizuální vzdálenost. Lze jej také nahradit přepínači:

Lidé s
() libovolné () všechny
[] psi
[] auta
[] lasersharks

To by umožnilo různé selektory (například „pouze jeden z“), ale zdá se mi, že je to trochu více komplikované

Filtrová lišta pro progresivní redukci

Pokud můžete zobrazit všechny výsledky (tj. Nejedná se o problém se šířkou pásma/serverem), můžete nejprve ukázat všechna data a poté přidat možnosti filtru, např. něco takového:

enter image description here

Což by např. A omezení z každého sloupce a OR možnosti ve sloupci. Pro vši ve sloupci Příslušenství ) mohou být hodnoty odvozeno z dotazu VYBRAT DISTINCT, sloupec jako věk je nejlépe zpracován povolením vybrat řádek a určit "" starší než/mladší než tento ".

Tvůrci dotazů

Bezplatní tvůrci dotazů, jak bylo uvedeno výše, poskytnou plnou flexibilitu - přesto jsem neviděl žádné, které by nevyděsily většinu náhodných uživatelů. Jsou to dobrá „pokročilá“ možnost, vyžadující jednodušší uživatelské rozhraní pro běžné dotazy a metodu ukládání a vyvolávání dříve nakonfigurovaných dotazů.

6
peterchen

Opravdu existují 4 skupiny:
[] Lidé se psy, ale ne auta
[] Lidé s auty, ale ne psi
[] Lidé se psy i auty
[] Lidé, kteří nemají psa ani auto

Je těžké uhodnout, co uživatel vlastně hledá, pouze při pohledu na příklad psa a auta.

Zaškrtávací políčko 2 by pravděpodobně mělo fungovat pomocí OR
A) Lidé se psy
B) Lidé s auty
Tyto 2 možnosti pomocí OR vám poskytne:
- když je zaškrtnuto pouze A, lidé se psy
- když je zaškrtnuto pouze B, lidé s auty
- při kontrole jak A, tak B, lidé se psy nebo auty
- pokud není zaškrtnuto, všichni lidé

Otázka zní, zda opravdu potřebujete vědět, zda lidé mají psa a auto.

Navrhoval bych se také blíže podívat na hledání tváří.

5
Geert

Myslím, že pro každé kritérium musíte výslovně ukázat, zda je součástí dotazu:

enter image description here

Tímto způsobem uživatel nemá pochybnosti o tom, zda vyhledávání „lidí se psy“ zahrnuje i lidi, kteří mají psy i auta.

UPRAVIT

Díky @Jeff za to, že jste na to poukázali. Ve skutečnosti by to mělo vypadat tak, aby umožňovalo výběr lidí se psy bez ohledu na to, zda mají také auto:

enter image description here

5

A co uvedení rozbalovací nabídky nad zaškrtávací políčka, kde si uživatel vybere, jaký druh vyhledávání zkusí - hledá VŠECHNA kritéria (a) nebo ŽÁDNÁ z kritérií (nebo):

enter image description here

4
Bevan

Poslední - tři přepínače.

Použití zaškrtávacího políčka, pokud jsou volby alternativní, je nesprávné.

Také bych byl konkrétnější:

(A) Pouze lidé se psy.

(B) Pouze lidé s auty.

(C) Lidé se psy nebo auty.

0
franz976