الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طريقه بحث

بدأه hady_matrix في 18 أغسطس 2010 · 5 رد · 644 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله

اريد اعمل بحث كما فى الصورة الموضحه

فكم حاله اف الشرطيه ساكتب

يعنى لى اليوزر لم يختار اى شى وكتب كلمه بحث فقط

او كتب كلمه بحث واختا قيمه واحدة من القوائم المنسدله

وهلم جرا

ماهى طريقه البحث المثاليه

لانى على وشك ان اعمل كذا حاله اف بناء على اخيار اليوزر

فما هى الطريقه المثاليه

post-129037-054328800 1282144896_thumb.p

المرفقات
Capture.PNG

يامقلب القلوب ثبت قلبى على دينك

محمد بن سعيد بن رسلان

#2

وعليكم السلام ورحمة الله وبركاته

بالنسبة لي ..

أقوم بتحديد أولاً طريقة البحث بمعنى هل هي OR أم AND .. بمعنى هل عندما يختار المستخدم أكثر من حقل يعني هذا أني سأجلب البيانات من قاعدة البيانات بدلالة كل الحقول مجتمعة مع بعضها البعض (AND) أم سأقوم بجلب البيانات من قاعدة البيانات التي قد تحقق جزء من تلك الحقول وليس كل الحقول (OR).

في حالة الـ AND أقوم بعمل الآتي:

أمر على كل الـ Fields الموجودة في النموذج .. وطبقاً للمثال الذي قمت بذكره .. فأقول:

1 - أمر على جملة البحث فإن وجدتها فارغة فأقوم بجلب كل المنتجات (مثلاً) من قاعدة البيانات أما إن وجدت المستخدم كتبها فأقوم بجلب البيانات التي تحقق جملة البحث. ويتم وضع النتيجة في متغير.

2- أمر على المدينة فإن وجدت المستخدم لم يقم باختيارها أقوم بجلب كل المنتجات (مثلاً) من قاعدة البيانات أما إن وجدت المستخدم اختار مدينة فأقوم بجلب البيانات التي تحقق المدينة. ويتم وضع النتيجة في متغير.

وهكذا .. ،،

بعد الانتهاء من المرور على كل الحقول ..

أقوم بعمل Intersection بين كل النتائج ليتكون لدي نتيجة البحث التي يمكن استخدامها وعرضها للمستخدم بعد ذلك.

في حالة الـ OR أقوم بعمل الآتي:

أمر على كل الـ Fields الموجودة في النموذج .. وطبقاً للمثال الذي قمت بذكره .. فأقول:

1 - أمر على جملة البحث فإن وجدتها فارغة فيصبح الناتج من جملة البحث NULL أما إن وجدت المستخدم كتبها فأقوم بجلب البيانات التي تحقق جملة البحث. ويتم وضع النتيجة في متغير.

2- أمر على المدينة فإن وجدت المستخدم لم يقم باختيارها فيصبح الناتج من المدينة NULL أما إن وجدت المستخدم اختار مدينة فأقوم بجلب البيانات التي تحقق المدينة. ويتم وضع النتيجة في متغير.

وهكذا ..

بعد الانتهاء من المرور على كل الحقول ..

أقوم بعمل Union بين كل النتائج ليتكون لدي نتيجة البحث التي يمكن استخدامها وعرضها للمستخدم بعد ذلك.

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#3

السلام عليكم

يمكن استخدام الطريقة التالية :

System.Text.StringBuilder st = new System.Text.StringBuilder( );
        st.Append("select *  from table1 where 1=1 ");

        if (txtSearch.Text.Length>0)
        {
            st.Append("and feidl1='").Append(txtSearch.Text).Append("'");
        }

        if (ddl1.SelectedValue.Length !="")
        {
            st.Append("and feidl2=").Append(ddl1.SelectedValue);
        }

string sql = st.ToString();

//يكون الاستعلام الان موجود في المتغير  sql

وهكذا لبقية الادوات وبعد ذلك تنفذ الاستعلام

وانتبه الى الحروف الخطرة مثل علامات التنصييص واعمل طريقة لمعالجتها .

تم تعديل هذه المشاركة بواسطة TareqVB في 19 أغسطس 2010 في 14:20

#4
hady_matrix كتب:

فما هى الطريقه المثاليه

برايي جملة استعلام تفي بالغرض لا اكثر ولا اقل

+

موضوع البحث موضوع واسع تخيل انك تعمل امكانياتو بامكانيات جوجل

اقتباس

System.Text.StringBuilder st = new System.Text.StringBuilder( );

st.Append("select * from table1 where 1=1 ");

if (txtSearch.Text.Length>0)

{

st.Append("and feidl1='").Append(txtSearch.Text).Append("'");

}

if (ddl1.SelectedValue.Length !="")

{

st.Append("and feidl2=").Append(ddl1.SelectedValue);

}

string sql = st.ToString();

//يكون الاستعلام الان موجود في المتغير sql

طريقة جميلة اخي طارق

لكن لو كان الربط بالجدول مع نفسه بامكانك اختصار حالة والاكتفاء برقم المنطقة

جرب هذه الطريقة

select *
from table
where col1 like '%'+@col1+'%' and (col2=@col2 
or col2 is null) and (col3=@col3 or col3 is null)

على مبدا يا له قيمة او لا يملك قيمة ويمكنك تكرار ذلك الى عدد غير منتهي من الحقول

تم تعديل هذه المشاركة بواسطة X-File في 20 أغسطس 2010 في 02:44

In bad state

#5

هنا نقطة هامة جداً ..

ألاحظ أنه يتم الاعتماد على كتابة الاستعلام داخل الكود .. وهذه الطريقة من أخطر الطرق في البرمجة وأسوأها على الإطلاق (عذراً على اللفظ) وهذا للأسباب التالية:

1) كل الأكواد الخاصة بك ستكون مربوطة جداً Coupled بالـ SQL Server أو قاعدة البيانات التي تعمل عليها. وهذا خطأ فادح فهذا لن يوفر الـ Maintainability أو الـ Flexibility أو الـ Scalability في البرنامج لأنه مربوط بنوع معين من قواعد البيانات .. وإذا أردت تغيير أي شيء في أي مكان ستقوم بتغيير الكود .. إلخ.

2) كتابة الاستعلامات داخل الكود يجلب الأخطاء بكثيرة Error Prone وهذا لأنه يتم التعامل مع الاستعلام على أنه مجرد String مما يؤدي إلى أن الـ Compiler يتجاهله تماماً عند عمل الـ Compilation ففي حالة وجود أخطاء في الاستعلام لن يتم اكتشافها إلا في الـ Run-Time وهذه كارثة بحد ذاتها. فمن الممكن أن تقضي ساعات وساعات لتكتشف أنك أخطأت في كتابة Select لتصبح بدلاً منها Slect ..!!

لهذا فإني اقترحت الحل الأول الذي من خلاله سأقوم باستعمال ORM أو حتى الـ Datasets .. كأي وسيط يعزل كل الـ SQL Statements عن أكواد البرمجة. وهذا أمر ضروري وليس من الرفاهيات في البرامج الاحترافية.

جزاكم الله خيراً

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#6
أحمد عبد المنعم كتب:

هنا نقطة هامة جداً ..

ألاحظ أنه يتم الاعتماد على كتابة الاستعلام داخل الكود .. وهذه الطريقة من أخطر الطرق في البرمجة وأسوأها على الإطلاق (عذراً على اللفظ) وهذا للأسباب التالية:

1) كل الأكواد الخاصة بك ستكون مربوطة جداً Coupled بالـ SQL Server أو قاعدة البيانات التي تعمل عليها. وهذا خطأ فادح فهذا لن يوفر الـ Maintainability أو الـ Flexibility أو الـ Scalability في البرنامج لأنه مربوط بنوع معين من قواعد البيانات .. وإذا أردت تغيير أي شيء في أي مكان ستقوم بتغيير الكود .. إلخ.

2) كتابة الاستعلامات داخل الكود يجلب الأخطاء بكثيرة Error Prone وهذا لأنه يتم التعامل مع الاستعلام على أنه مجرد String مما يؤدي إلى أن الـ Compiler يتجاهله تماماً عند عمل الـ Compilation ففي حالة وجود أخطاء في الاستعلام لن يتم اكتشافها إلا في الـ Run-Time وهذه كارثة بحد ذاتها. فمن الممكن أن تقضي ساعات وساعات لتكتشف أنك أخطأت في كتابة Select لتصبح بدلاً منها Slect ..!!

لهذا فإني اقترحت الحل الأول الذي من خلاله سأقوم باستعمال ORM أو حتى الـ Datasets .. كأي وسيط يعزل كل الـ SQL Statements عن أكواد البرمجة. وهذا أمر ضروري وليس من الرفاهيات في البرامج الاحترافية.

جزاكم الله خيراً

اخي احمد في الاستعلام الخاص بي انا يمكنك وضعه ب dataset or stored procedure

اما ان كان قصدك على مثال اخي طارق قد تكون له اسبابه ولكن انا افضل كل شي على طرف قاعدة البيانات

In bad state

مواضيع مشابهة