PDA

View Full Version : يك سوال جالب وحرفه اي كه نديدم تا حالا كسي راه حلي براش پيدا كنه؟



sekhavat
جمعه 15 شهریور 1387, 00:20 صبح
در یک برنامه برای جستجو در بانک اطلاعاتی از دستورات SQL استفاده می کنم . در این دستور به دنبال نام خاصی می گردم که ممکن است در 40 فیلد این بانک یافت شود ، بخاطر همین از OR استفاده می کنم ، حالا در برنامه برای من مهم است که کدام شرط از OR ها برقرار شده است ! یعنی وقتی دستور اجرا می شود ، اولین شرط OR برقرار شده است یا دومی یا سومی یا ... یا چهلمی ؟ تا بتوانم آنرا در DataGrid نمایش بدهم !
اينم كد برنامه

Public Connection As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DataBase.mdf;Integrated Security=True;User Instance=True")
Dim FindSt As New SqlCommand("Select * From Position Where (M1 LIKE '%' + @m + '%') OR (M2 LIKE '%' + @m + '%') OR (M3 LIKE '%' + @m + '%') OR (M4 LIKE '%' + @m + '%') OR (M5 LIKE '%' + @m + '%') OR (M6 LIKE '%' + @m + '%') OR (M7 LIKE '%' + @m + '%') OR (M8 LIKE '%' + @m + '%') OR " _
& "(M9 LIKE '%' + @m + '%') OR (M10 LIKE '%' + @m + '%') OR (M11 LIKE '%' + @m + '%') OR (M12 LIKE '%' + @m + '%') OR (M13 LIKE '%' + @m + '%') OR (M14 LIKE '%' + @m + '%') OR (M15 LIKE '%' + @m + '%') OR (M16 LIKE '%' + @m + '%') OR (M17 LIKE '%' + @m + '%') OR (M18 LIKE '%' + @m + '%') OR (M19 LIKE '%' + @m + '%') OR (M20 LIKE '%' + @m + '%') OR (M21 LIKE '%' + @m + '%') OR " _
& "(M22 LIKE '%' + @m + '%') OR (M23 LIKE '%' + @m + '%') OR (M24 LIKE '%' + @m + '%') OR (M25 LIKE '%' + @m + '%') OR (M26 LIKE '%' + @m + '%') OR (M27 LIKE '%' + @m + '%') OR (M28 LIKE '%' + @m + '%') OR (M29 LIKE '%' + @m + '%') OR (M30 LIKE '%' + @m + '%') OR (M31 LIKE '%' + @m + '%') OR (M32 LIKE '%' + @m + '%') OR (M33 LIKE '%' + @m + '%') OR (M34 LIKE '%' + @m + '%') OR (M35 LIKE '%' + @m + '%') OR (M36 LIKE '%' + @m + '%') OR (M37 LIKE '%' + @m + '%') OR (M38 LIKE '%' + @m + '%') OR (M39 LIKE '%' + @m + '%') OR (M40 LIKE '%' + @m + '%') OR (M41 LIKE '%' + @m + '%')", Connection)

linux
جمعه 15 شهریور 1387, 02:13 صبح
در یک برنامه برای جستجو در بانک اطلاعاتی از دستورات SQL استفاده می کنم . در این دستور به دنبال نام خاصی می گردم که ممکن است در 40 فیلد این بانک یافت شود ، بخاطر همین از OR استفاده می کنم ، حالا در برنامه برای من مهم است که کدام شرط از OR ها برقرار شده است ! یعنی وقتی دستور اجرا می شود ، اولین شرط OR برقرار شده است یا دومی یا سومی یا ... یا چهلمی ؟ تا بتوانم آنرا در DataGrid نمایش بدهم !
اينم كد برنامه

Public Connection AsNew SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DataBase.mdf;Integrated Security=True;User Instance=True")
Dim FindSt AsNew SqlCommand("Select * From Position Where (M1 LIKE '%' + @m + '%') OR (M2 LIKE '%' + @m + '%') OR (M3 LIKE '%' + @m + '%') OR (M4 LIKE '%' + @m + '%') OR (M5 LIKE '%' + @m + '%') OR (M6 LIKE '%' + @m + '%') OR (M7 LIKE '%' + @m + '%') OR (M8 LIKE '%' + @m + '%') OR " _
& "(M9 LIKE '%' + @m + '%') OR (M10 LIKE '%' + @m + '%') OR (M11 LIKE '%' + @m + '%') OR (M12 LIKE '%' + @m + '%') OR (M13 LIKE '%' + @m + '%') OR (M14 LIKE '%' + @m + '%') OR (M15 LIKE '%' + @m + '%') OR (M16 LIKE '%' + @m + '%') OR (M17 LIKE '%' + @m + '%') OR (M18 LIKE '%' + @m + '%') OR (M19 LIKE '%' + @m + '%') OR (M20 LIKE '%' + @m + '%') OR (M21 LIKE '%' + @m + '%') OR " _
& "(M22 LIKE '%' + @m + '%') OR (M23 LIKE '%' + @m + '%') OR (M24 LIKE '%' + @m + '%') OR (M25 LIKE '%' + @m + '%') OR (M26 LIKE '%' + @m + '%') OR (M27 LIKE '%' + @m + '%') OR (M28 LIKE '%' + @m + '%') OR (M29 LIKE '%' + @m + '%') OR (M30 LIKE '%' + @m + '%') OR (M31 LIKE '%' + @m + '%') OR (M32 LIKE '%' + @m + '%') OR (M33 LIKE '%' + @m + '%') OR (M34 LIKE '%' + @m + '%') OR (M35 LIKE '%' + @m + '%') OR (M36 LIKE '%' + @m + '%') OR (M37 LIKE '%' + @m + '%') OR (M38 LIKE '%' + @m + '%') OR (M39 LIKE '%' + @m + '%') OR (M40 LIKE '%' + @m + '%') OR (M41 LIKE '%' + @m + '%')", Connection)

به احتمال بسیار زیاد طراحی غلط دیتابیس شما را به اینجا کشانده است.
نرمال سازی یکیش هم این هست که از تکرار اطلاعات در فیلدهای تکراری جلوگیری بشود.

Amir_Safideh
جمعه 15 شهریور 1387, 10:23 صبح
چیزی که به ذهنم میرسه اینه شما از دستور Case When ......End استفاده کنید . و برای هر یک از حالتهای جستجو یه خروجی که برای خودت قابل فهم باشه در نظر بگیری . مثلا :

SELECT *,(CASE WHEN(M1 LIKE '%' + @m + '%')THEN 'M1' WHEN(M2 LIKE '%' + @m + '%')THEN 'M2'END)Field_Name
From Position
Where ......
حالا شما یه فیلد دارید که نام ستونی رو که شرط در اون صادق بوده رو برمیگردونه . فقط شما باید نام تمام فیلدهای مورد نظرت رو در اون اضافه کنید .
--------------
موفق باشید .

sekhavat
جمعه 15 شهریور 1387, 16:42 عصر
سلام آقا امير
اين فيلدو كه ميگي چطور استخراجش كنم؟

sekhavat
جمعه 15 شهریور 1387, 16:59 عصر
با تشكر فراوان از آقا امير عزيز
درست جواب داد مرسي
دمت گرم