2009-11-09 15 views
26

वर्तमान में मेरे पास एक वेब एप्लिकेशन है जहां उपयोगकर्ता SQL SELECT स्टेटमेंट जेनरेट करने के लिए ड्रॉपडाउन सूचियों का उपयोग कर सकता है:कैसे मैं एक वेब फार्म जीयूआई में उपयोगकर्ता के अनुकूल बूलियन तर्क लागू कर सकते हैं?

कॉलम का चयन ड्रॉपडाउन | ऑपरेटर ड्रापडाउन (! = => < < => =) | मूल्य चयन ड्रॉपडाउन

उपयोगकर्ता यह कई बार कर सकता है, और "फ़िल्टर" वर्तमान में सभी एंडेड हैं।

मैं बनाने या कथन की संभावना जोड़ना चाहते हैं। मैं उस मामले में ओआरएस को आसानी से जोड़ सकता हूं जहां कॉलम समान हैं, लेकिन

((ए या बी या सी) और (डी या ई)) या (एफ और जी) जटिल जटिल तर्कों के बारे में क्या है?

मैं उपयोगकर्ताओं को उपयोगकर्ता के अनुकूल तरीके से ऐसे बयान कैसे बना सकता हूं?

संपादित करें: निर्दिष्ट करने के लिए, सामान्य दर्शकों के लिए उपयोगकर्ता के अनुकूल। वर्तमान में मैं उन डेवलपर्स के साथ काम करता हूं जो कभी-कभी गैर-तकनीकी क्लाइंट के लिए SQL कोड क्वेरी करते हैं जिन्हें हमारे डेटाबेस से विशिष्ट जानकारी की आवश्यकता होती है। लक्ष्य यह है कि यह वेब ऐप क्लाइंट को इसे स्वयं करने के लिए उपयोग करने में आसान टूल देकर उन्हें हाथ-कोड करने की आवश्यकता को हटा देगा।

EDIT2: वर्तमान में ऐप का उपयोग अंतिम उपयोगकर्ताओं द्वारा नहीं किया जा रहा है। मेरे उपयोग के लिए मेरे पास एकमात्र डेटा पिछले हस्तलिखित एसक्यूएल प्रश्न हैं और इस प्रकार ग्राहक द्वारा पूछे जाने वाले प्रश्नों की तरह। यह देखते हुए कि मैं इसे आसान बनाने में कर सकता है (उदाहरण के लिए उपयोगकर्ताओं की क्वेरी में वे के लिए पूछने के लिए करते हैं के प्रकार के प्रश्नों उत्पन्न करने की क्षमता की सीमा), लेकिन मैं अगर किसी को भी GUIs में बूलियन तर्क संवाद स्थापित करने के लिए बस और पूरी तरह से अनुभव है देखना चाहता हूँ।

आपके समय के लिए धन्यवाद।

+1

द्वारा "उपयोगकर्ता के अनुकूल" आप क्या मतलब है "उपयोगकर्ता के अनुकूल एक के लिए सामान्य श्रोताओं "या" उन लोगों के लिए उपयोगकर्ता के अनुकूल जो कम से कम बूलियन तर्क से थोड़ा परिचित हैं "? –

+0

क्षमा करें, एक और सवाल: क्या अंत उपयोगकर्ता पहले से ही ऐप के वर्तमान पुनरावृत्ति का उपयोग कर रहे हैं? बस सोच रहा है कि क्या वे ड्रॉपडाउन के कॉलम/ऑपरेटर/वैल्यू ट्रायड को पहचानने और प्रभावी ढंग से उपयोग करने के लिए प्रशिक्षित हैं। –

उत्तर

5

जब आप ((A or B) and C) or (D or E or F) संभालने की ज़रूरत है, तो आप एक पेड़ की तरह डेटा संरचना के साथ काम कर रहे हैं: से मैं क्या याद है, वे कुछ इस तरह से किया था। मेरे अनुभव में, उपयोगकर्ताओं को "सुंदर" या "अंतर्ज्ञानी" तरीके से निर्णय पेड़ का प्रतिनिधित्व करने का कोई आसान तरीका नहीं है। एएसपी.नेट वेबफॉर्म में इसकी दोगुनी मुश्किल है।

हालांकि, एक कोशिश की गई और सही दृष्टिकोण निम्न है: एकल टेक्स्टबॉक्स जहां क्लॉज स्वीकार कर रहा है।मेरा विश्वास करो, एकल-इनपुट दृष्टिकोण वास्तव में सबसे सरल और सहज उपयोगकर्ता इंटरफ़ेस है, और इसमें क्वेरी फ़िल्टर के तेज़ इनपुट/संशोधन की अनुमति देने का लाभ * भी है।

** तकनीकी पक्ष से एक अन्य लाभ, अपने स्वयं के लेक्सर/पार्सर और एएसटी लिखने में सक्षम है। आप मूल क्रूड ऐप में कितनी बार ऐसा करते हैं:) *

आप पहले से ही अपने उपयोगकर्ताओं को प्रशिक्षण दे रहे हैं कि आप अपने विज्ञापन हाऊस क्वेरी इंजन का उपयोग कैसे करें, आप उन्हें (account.Balance < -2000 and account.Type == 'Checking') OR (account.Number = 123456) टाइप करने के लिए भी प्रशिक्षित कर सकते हैं यह क्या कहता है यह लौटता है।

यदि आप इस दृष्टिकोण के साथ जाते हैं, तो उपयोगकर्ता को उपलब्ध कॉलम की एक ड्रॉपडाउन सूची प्रदान करें, ताकि किसी आइटम पर डबल-क्लिक करने से आइटम को कर्सर स्थान पर टेक्स्टबॉक्स में डाला जा सके।

+0

मैं यूआई सिद्धांतों पर सहमत होना चाहता हूं, लेकिन मनमाने ढंग से 'WHERE' इनपुट सुरक्षा दुःस्वप्न की तरह लगता है। क्या उस तरह के इनपुट को फ़िल्टर करने का कोई विश्वसनीय तरीका है? –

+2

आप ';' और अन्य बुरी चीजों को हटाने जैसे स्वच्छता का प्रयास कर सकते हैं .. लेकिन क्लाइंट को एसक्यूएल सीखने के लिए कह रहे हैं मुझे नहीं लगता कि यह एक अच्छा समाधान है – Earlz

+1

यह वास्तव में क्लाइंट को सीखने के लिए क्लाइंट को नहीं बता रहा है, बस क्लाइंट को सीखने के लिए कह रहा है इन आवश्यकताओं को एक लिखित रूप में कैसे व्यक्त करना है जो शायद दृश्य, ड्रॉपडाउन-आधारित एक से अधिक सरल है। –

1

मैक ओएस एक्स बिल्कुल इस तरह की चीज़ करने के लिए बहुत अच्छा जीयूआई विजेट प्रदान करता है। इस प्रकार के लेआउट/इंटरैक्शन के बाद आप अपने जीयूआई को मॉडल कर सकते हैं।

+0

यह वहाँ क्या ओ पी (जटिल बूलियन एकाधिक मापदंड संबंधित तर्क) के लिए पूछ रहा है करने के लिए कोई रास्ता नहीं है, और अगर ओपी मैक पर विकास नहीं करता है कि स्क्रीनशॉट सब वह मिल गया है कि स्क्रीनशॉट से स्पष्ट नहीं है। –

+0

सवाल का मेरे व्याख्या यह है कि वह एक तरह से एक स्पष्ट यूआई है कि उपयोगकर्ताओं को सक्षम बनाता है के लिए, कम या ज्यादा, बूलियन तर्क बयान की सूची लिखने पेश करने के लिए की तलाश में है था। मुझे नहीं लगता था कि वह कोड लिखने के बारे में पूछ रहा था जो वास्तव में उपयोगकर्ता के इनपुट की व्याख्या करेगा। –

+1

क्षमा करें, मैं एक सवाल के रूप में मेरी टिप्पणी अलग तरीके से व्यक्त करेंगे: कैसे की तरह एक इनपुट कुछ करता है "((ए या बी या सी) और (घ या ई)) या (एफ और जी)" (ओ पी के सवाल से उद्धृत) में ऊपर यूआई स्क्रीनशॉट? –

0

एक और विकल्प SQL सर्वर प्रबंधन स्टूडियो क्वेरी बिल्डर इंटरफ़ेस की तरह कुछ है - कई पंक्तियां और कॉलम, जहां पंक्तियां एंड्स का प्रतिनिधित्व करती हैं, और कॉलम ओआरएस (या इसके विपरीत, मुझे याद नहीं है)।

आप उपयोगकर्ताओं की सहायता के लिए परिणामी क्वेरी के वास्तविक समय अपडेट कर सकते हैं (जैसे SQL सर्वर परिणामस्वरूप SQL अपडेट करता है)।

1

यह भी एक WinForms अनुप्रयोग में प्रतिनिधित्व करने के लिए मुश्किल है।

आपको एक शर्त समूह की अवधारणा को लागू करने की आवश्यकता है, जिसमें एक या अधिक कथन और एक सशर्त ऑपरेटर शामिल है।

मैंने जो देखा है उसका सबसे अच्छा कार्यान्वयन गेमSpy सर्वर फ़िल्टरिंग से था - मैंने बस एक स्क्रीनशॉट खोजने की कोशिश की, लेकिन मैं खाली आया (क्या वह प्रोग्राम अभी भी मौजूद है?)।

(
    Condition 1 
) OPERATOR 
(
    Condition 2 
) OPERATOR 
(
    (
     Condition 3 
    ) OPERATOR 
    (
     Condition 4 
    ) 
)
1

जब मुझे इस तरह की कोई समस्या दिखाई देती है, तो मैं इस समस्या को हल करने के तरीके के समान, एक स्टैक के रूप में इसे लागू करने के बारे में सोचने में मदद नहीं कर सकता।

समस्या यहाँ है कि यह बहुत सहज ज्ञान युक्त

नमूना यूआई प्रतीत नहीं होता: ([बटन] उपयोगकर्ता इनपुट > {सूची}

मूल्य के लिए < एक पाठ बॉक्स: < > [पुश] [और] [या]

ढेर {

} (एचपी आरपीएन कैलकुलेटर ढेर के ऊपर डाल दिया संपादन क्षेत्र)

तो, अगर मैं अभिव्यक्ति ((ए और बी) या (सी और डी)) लिखना चाहते थे, मैं इस करना होगा: एक [धक्का] (ढेर 'ए' होते हैं) बी [पुश] (ढेर में "बी", "ए" होगा) [और] (ढेर में "(ए और बी)" होगा 0) सी [पुश] (ढेर में "सी", "(ए और बी) ") डी [पुश] (ढेर में" डी "," सी "," (ए और बी) " [और] (ढेर में" (सी और डी) "," (ए और बी) होगा ") [या] (ढेर में" ((ए और बी) या (सी और डी) ")

यदि आप अन्य ऑपरेटरों को जोड़ना चाहते थे, और बहुत अधिक नहीं थे, तो आप अतिरिक्त जोड़ सकते थे बटन, या ऑपरेटर के लिए एक अलग पाठ बॉक्स बनाने के

मूल्य: < > [पुश] ऑपरेटर < > [कम्बाइन]

यदि आप एकल ऑपरेटरों समर्थन करना चाहते थे, तो आप क्या यह एक है का ट्रैक रखने के आवश्यकता होगी उपसर्ग या पोस्टफिक्स ऑपरेटर, या बस उपसर्ग मानें (बूलियन यूनरी ऑपरेटर "नहीं" आमतौर पर उपसर्ग है)। टर्नरी ऑपरेटरों में आम तौर पर दो इंफिक्स डिज़ाइनर होते हैं, इसलिए यदि आप उनका समर्थन करना चाहते हैं तो अधिक जटिलता है। कुछ बाइनरी (और एन-आरी) ऑपरेटरों में एक उपसर्ग, इंफिक्स और प्रत्यय घटक होता है "कॉलमैथ (ए, बी)" तो यह वास्तव में नीचे आता है कि आप इसे कितना जटिल बनाना चाहते हैं।

बस एक विचार।

12

एप्पल नेस्टेड बूलियन अभिव्यक्ति के लिए एक जीयूआई डिजाइन करने के लिए एक रास्ता मिल गया है लगता है: UX.stackexchange पर स्वीकार किए जाते हैं जवाब देखें।

enter image description here

2

मैं ईमानदारी से नहीं व्यापार मूल्य कस्टम "कहाँ" लिखित रूप में "से" देख पा रहे हैं, "का चयन करें", या किसी अन्य एसक्यूएल आदेश प्रॉक्सी। विशेष रूप से, इस विशेष संदर्भ में (फ्लाई क्वेरी पर डीबी एक्सेस और कस्टम) क्लाइंट नरक के सुरक्षा द्वार खोलता है।

दे "dummies" रचना (मैं यह मान होता नियमित एसक्यूएल उपकरण का उपयोग कर में सक्षम नहीं हैं) "सहज" क्वेरी होने की प्रतीक्षा कर रहा एक आपदा है। मुझे लगता है कि 2003 या 2004 के बीजे के क्लब क्रेडिट कार्ड की जानकारी बस्ट भावना में बहुत करीब थी। मुझे लगता है (और यह केवल एक अनुमान है !!!) कुछ बड़े विपणन मालिक ने कहा, "हम क्रेडिट कार्ड पट्टी जानकारी को बचाएंगे ताकि हम बाद में उस जानकारी का लाभ उठा सकें।" "क्या आप केवल एक टेबल में सार्वजनिक रूप से उपलब्ध जानकारी चाहते हैं और पीआईआई सांख्यिकीय रूप से बाल्टी" चाहते हैं - डेवलपर से पूछा ..... "नहीं, हम अभी तक नहीं जानते कि हम उस जानकारी का उपयोग कैसे करना चाहते हैं, हमें इसे पूछने के लिए एक टूल विकसित करें एक कस्टम तरीका ..... "आपदा के रास्ते पर पहला कदम पत्थर था। :(

इस बीच, निश्चित रूप से ऐसे स्थान हैं जब UI को अभिव्यक्तियों को लिखने/विश्लेषण करने के लिए आवश्यक है (सुरक्षा नीति विश्लेषण उपकरण, बूलियन/स्विच बीजगणित अनुसंधान, आदि) मेरा मानना ​​है कि सबसे अच्छा यूआई अभी तक बनाया जाना है (हमेशा :)), लेकिन अगर यह बनाया गया था, मैं कल्पना करता हूँ यह होने संभावना के लिए:

  1. अभिव्यक्ति पार्स (के रूप में उपयोगकर्ता के टुकड़े से की अभिव्यक्ति मात्रा टुकड़ा)
  2. कहते हैं के रूप में एक को पार्स पेड़ का निर्माण कर सकते तुच्छ होना चाहिए एक पार्सिंग पेड़ के रूप में अभिव्यक्ति दिखाएं (जो इसे मजेदार बनाना चाहिए)।
  3. दिखाएँ सही/
  4. ("एक लय की तरह" कार्यों के लिए विशेष रूप से महत्वपूर्ण) अभिव्यक्ति
  5. ड्रा बीएफ hypercube द्वारा प्रस्तुत बीएफ संस्थानिक जोड़ने के साथ एक Karnaugh मानचित्र (उच्च आयामी अभिव्यक्ति हालांकि साथ अच्छी किस्मत बनाएं के लिए झूठी तालिका)
  6. अभिव्यक्ति के लिए गतिशील रूप से वेन आरेख उत्पन्न करें।
  7. गैर-आवश्यक चर या "अभिव्यक्ति भाग" को हाइलाइट करें।
  8. बूलियन अभिव्यक्ति न्यूनीकरण के मैकक्लूसकी या पेट्रिक विधि का उपयोग करें।
18

वहाँ एक jQuery जो एक दिलचस्प तरीके से ऐसा करते हैं यह करने के लिए प्लगइन, QueryBuilder कहा जाता है, यह है: http://mistic100.github.io/jQuery-QueryBuilder/

Jquery QueryBuilder Screenshot

+0

यह स्वीकार्य उत्तर होना चाहिए –

संबंधित मुद्दे