PDA

View Full Version : جستجوی ترکیبی



first_squit
پنج شنبه 29 آذر 1386, 19:48 عصر
با سلام خدمت دوستان عزیز

در برنامه ای که در حال نوشتن اون هستم یک قسمت وجود داره که باید یک امکان برای جستجوی ترکیبی از چند جدول رو قرار بدم

من ابتدا دستور SELECT اون به همراه تمام join های رو ایجاد کردم این دستور Select در صورتی درست عمل می کنه که کاربر تمام مقادیر خواسته شده رو وارد کنه
یا به عبارت دیگر این جستجو در صورتی درست عمل می کنه که تمام مقدادیر رو برای شرط Where توسط کاربر وارد بشه


WHERE (siasi_in.in_one = N'داخلی ') AND (bahse_on.bahse_on_one = N'خارجی') AND (in_bahs.bahse_one = N'سیاسی') AND (nazari.nazari_one = N'علمی') AND
(out_mantagheh.out_one = N'علمی') AND (out_mellal.mellal_one = N'علمی') AND (out_sazman.sazman_one = N'علمی') AND (siasi.siasi_one = N'علمی') حالا به نظر شما دوستان
بنده چطور می تونم این امکان رو به کاربر بدم که در جستجوی ترکیبی مقداری رو وارد نکنه

hassan razavi
پنج شنبه 29 آذر 1386, 23:46 عصر
از دستو ر% like استفاده کنید ، تا در صورتی که کاربر چیزی را وارد نکرد برای آن فیلد شرطی در نظر گرفته نشود

first_squit
جمعه 30 آذر 1386, 10:07 صبح
از دستو ر% like استفاده کنید ، تا در صورتی که کاربر چیزی را وارد نکرد برای آن فیلد شرطی در نظر گرفته نشود

نه اینطوری مشکل حل نشد

دوستان دیگر نظری ندارند

اَرژنگ
جمعه 30 آذر 1386, 11:25 صبح
۱) از اس‌کیو‌الی که استفاده میکنید معلوم است که طراحی جدولتان درست نیست.
siasi_in.in_one به نظر میاد که میاد باید یک فیلده کلیدی باشد.

۲) اس‌کیو‌ال را باید به شکل داینامیک ایجاد کنید، یکی یکی مقادیری را که دارید از اس‌کیو‌ال دربیارید و به طریق داینامیک اگر کاربر مقدار داده اضافه کنید.

choobin84
جمعه 30 آذر 1386, 17:28 عصر
str="select siasi_in.*,bahse_on.* from in_one,bahse_on where ";

if(textBox1.Text!="")
str+="siasi_in.ine_one like '%"+TextBox1.Text+"%' and ";

if(textBox2.Text!="")
str+="bahse_on.bahse_on_one like '%"+TextBox2.Text+"%' and ";

str+="siasi_in.id=bahse_on.id";
"بین دو جدولی که استفاده کردم فیلد id مشترک بود.توجه دارید برای اینکه دو تا جدول به هم پیوند بخورند یک فیلد مشترک لازم دارند

سار
شنبه 01 دی 1386, 10:00 صبح
با سلام خدمت دوستان عزیز

در برنامه ای که در حال نوشتن اون هستم یک قسمت وجود داره که باید یک امکان برای جستجوی ترکیبی از چند جدول رو قرار بدم

من ابتدا دستور SELECT اون به همراه تمام join های رو ایجاد کردم این دستور Select در صورتی درست عمل می کنه که کاربر تمام مقادیر خواسته شده رو وارد کنه
یا به عبارت دیگر این جستجو در صورتی درست عمل می کنه که تمام مقدادیر رو برای شرط Where توسط کاربر وارد بشه


WHERE (siasi_in.in_one = N'داخلی ') AND (bahse_on.bahse_on_one = N'خارجی') AND (in_bahs.bahse_one = N'سیاسی') AND (nazari.nazari_one = N'علمی') AND
(out_mantagheh.out_one = N'علمی') AND (out_mellal.mellal_one = N'علمی') AND (out_sazman.sazman_one = N'علمی') AND (siasi.siasi_one = N'علمی') حالا به نظر شما دوستان
بنده چطور می تونم این امکان رو به کاربر بدم که در جستجوی ترکیبی مقداری رو وارد نکنه

vwAllCourses یک Viwe که Join ها تو تو شکل گرفته.
البته این کار معایب خودش رو هم داره.

یه چیزی شبیه این لازم داری :


string SqlCommand = "Select * From College.vwAllCourses ";
string Where = string.Empty;
if (FacultyId != Guid.Empty)
Where = " (TeacherId = '" + FacultyId.ToString() + "') ";
if (StudentId != Guid.Empty)
Where += (string.IsNullOrEmpty(Where) ? string.Empty : " And ") + " (StudentId = '" + StudentId.ToString() + "') ";
if (!string.IsNullOrEmpty(TermId))
Where += (string.IsNullOrEmpty(Where) ? string.Empty : " And ") + " (TermId = " + TermId + ") ";
if (!string.IsNullOrEmpty(CourseId))
Where += (string.IsNullOrEmpty(Where) ? string.Empty : " And ") + " (CourseId = '" + CourseId + "') ";
if (Start.HasValue)
Where += (string.IsNullOrEmpty(Where) ? string.Empty : " And ") + " ( StartTerm = CONVERT(DATETIME, '" + Start.Value.ToShortDateString() + " 00:00:00', 102)) ";
if (Finish.HasValue)
Where += (string.IsNullOrEmpty(Where) ? string.Empty : " And ") + " ( FinishTerm = CONVERT(DATETIME, '" + Finish.Value.ToShortDateString() + " 00:00:00', 102)) ";
if (!string.IsNullOrEmpty(Where))
SqlCommand += " Where " + Where;