PDA

View Full Version : جستجو از چند جدول،ادغام و پیاده سازی Paging



mohsen-sh
شنبه 21 اسفند 1389, 01:54 صبح
بنده میخام جستجویی بنویسم که از چند جدول Like بزنم و بعد تو یه دیتاتیبل ادغام کنم و نمایش بدم.
نوشتن این جستجو کاری نداره،ولی وقتی میخام برای پیجینگ از طریق ObjectDataSource برای CustomPagingآمادش کنم نمیدونم چکار کنم.
تو حالت معمولی میومدیم با امکانات اس کیوال (Row_Number ) و ObjectDataSource از ( maximumRows,startRowIndex) استفاده میکردیم و مقادررو صفحه بندی میکردیم؛
ولی الان که دارم از چند جدول جستجو میکنم موندم چطوری کارکنم
لطفا کمک کنید

mohsen-sh
شنبه 21 اسفند 1389, 13:41 عصر
اگر کسی ایده ای واسه صفحه بندی جستجو داره که از چند جدول باشه لطفا بگه
خیلی بهش نیاز دارم

mehdi-ghafari
یک شنبه 22 اسفند 1389, 14:31 عصر
خوب درسته شما از چندتا جدول استفاده میکنید ولی در آخر یه نتیجه برمیگرده دیگه مگه نه؟

hamedsabzian
یک شنبه 22 اسفند 1389, 15:49 عصر
با همون روش Row_Number میشه!
نهایتا نتیجه جستجو رو توی یک Temp Table بریز و روی اون با استفاده از Row_Number کارت رو انجام بده!

mohsen-sh
دوشنبه 23 اسفند 1389, 02:05 صبح
آخه جستجوی من حاصل از یک دستور جوین نیست
چون جداول غیر همسان هستن،باید از جداول به صورت جداگانه دیتاتیبل بگیرم،بعد تو یه دیتاتیبل دیگه ادغام کنم؛به خاطر همین دیگه نمیدونم چطور این دیتاتیبل رو پیج بندی کنم
(در مورد ساخت جدول Temp،فکر نمیکنم اصلا کار بهینه ای باشه!)
شایدم من دارم راه رو اشتباه میرم
اگه روش بهینه ای واسه جستجو از چند جدول دارید لطفا بگید

hamedsabzian
دوشنبه 23 اسفند 1389, 08:57 صبح
اگه کدتون رو بزارید، بهتر میشه متوجه مسئله شد!

mohsen-sh
دوشنبه 23 اسفند 1389, 09:37 صبح
کد خاصی نیست
جداول به این صورته:

درس
مقاله
کتاب
...

جستجو براساس یک کلمه که در عنوان و توضیحات هر جدول به صورت جداگانه انجام میشه،بعد تو یه دیتاتیبل با هم ادغام میشه(ادغام با کد نویسی در سی شارپ)
من اگر میتونستم اطلاعات رو با یک دستور از جداول مختلف بگیرم،اونوقت بخش RowNumber رو به ادامه دستور اس کیو ال میتونستم اضافه کنم و با اون پیجینگ کنم،ولی با دستو جوین که نتونستم این عمل رو تبدیل به یگ دستور کنم،چون هیچ فیلد متناظری بین جداول نیست.
شاید اصلا این طور کدنویسی مشکل داشته باشه،نمیدونم،ولی از ظاهر کار که اینجوری برداشت میکنم

(در کل من میخام یک کلمه از کاربر بگیرم،تو تمام یا تعدادی از جداولم جستجو بزنم و نتایج رو به صورت پیجینگ سفارشی(واسه لود نشدن کامل رکوردها)نمایش بدم)
ممنون میشم کمک کنید

amirjalili
دوشنبه 23 اسفند 1389, 10:30 صبح
ببین نتیجه هر چی که باشه تو باید یه join از جداولت بگیری و بعد روشون like بزنی .. پس تو نهایتا یه جدول داری و میتونی مثل قبل عمل کنی.
اگر نمیتونی Like بزنی باید از اون جداول یه temp table درست کنی و کار like رو روی اون جدول انجام بدی.
http://ask.sqlservercentral.com/questions/4280/create-temporary-table-from-multiple-tables

hamedsabzian
دوشنبه 23 اسفند 1389, 11:32 صبح
(ادغام با کد نویسی در سی شارپ)

این ادغام رو توی SQL هم می تونی انجام بدی! با استفاده از دستور UNION و احیانا CAST کردن فیلدها و در ادامه ریختن نتیجه توی Temop Table و انجام Paging.

mehran_337
دوشنبه 23 اسفند 1389, 11:34 صبح
به نظر من از union استفاده کن یعنی با یک select جداول را زیر هم ادغام کن حالا وقتی نتیجه select ایجاد بشه مثل یه کوئری باهاش رفتار می شه و شما نیازی به کاری نداری . مثلا :

select id,darsName as NAME,"PageDarsView.aspx" as pgLink from tblDars where darsName like "text%"
union
select id,ArticleName as NAME,"PageArticleView.aspx" as pgLink from tblArticle where ArticleName like "text%"
union
select id,BookName as NAME,"PageBookView.aspx" as pgLink from tblBook where BookName like "text%"


البته این کد ممکنه از لحاظ املایی اشکالی داشته باشه خودت درست کن اما مسئله اینه که برای جدول باید صفحه خاص خودش باز شه که فیلد pgLink اینو تولید می کنه . جایی اگه مبهم بود بفرمایید.
کلا جدولی جدیدی که ایجاد می شه و می تونی توی گریدویو هم بزاریش و pagingesh هم اتوماتیک درست کار خواهد کرد شامل فیل id,عنوان یافته شده و صفحه ای خواهد بود که با کلیک بر روی نتیجه جستجو اون صفحه باید باز بشه.

mohsen-sh
دوشنبه 23 اسفند 1389, 16:26 عصر
ممنون از همه تون
به نتیجه رسیدم،هردو روش خوبه:لبخندساده:

mehdi-ghafari
سه شنبه 10 خرداد 1390, 13:34 عصر
به نظر من از union استفاده کن یعنی با یک select جداول را زیر هم ادغام کن حالا وقتی نتیجه select ایجاد بشه مثل یه کوئری باهاش رفتار می شه و شما نیازی به کاری نداری . مثلا :

select id,darsName as NAME,"PageDarsView.aspx" as pgLink from tblDars where darsName like "text%"
union
select id,ArticleName as NAME,"PageArticleView.aspx" as pgLink from tblArticle where ArticleName like "text%"
union
select id,BookName as NAME,"PageBookView.aspx" as pgLink from tblBook where BookName like "text%"


البته این کد ممکنه از لحاظ املایی اشکالی داشته باشه خودت درست کن اما مسئله اینه که برای جدول باید صفحه خاص خودش باز شه که فیلد pgLink اینو تولید می کنه . جایی اگه مبهم بود بفرمایید.
کلا جدولی جدیدی که ایجاد می شه و می تونی توی گریدویو هم بزاریش و pagingesh هم اتوماتیک درست کار خواهد کرد شامل فیل id,عنوان یافته شده و صفحه ای خواهد بود که با کلیک بر روی نتیجه جستجو اون صفحه باید باز بشه.
ممنون از راهنماییتون
من چندتا سوال دارم :
1) چرا آدرس صفحه اومده تو کوئری؟
2) این کوئری ها رو میشه تو spها هم نوشت؟
3) در مورد pgLink که فرمودید من درست متوجه نشدم
4)این همون جستجوی پیشرفته هست دیگه؟؟؟
و ....:قلب:
بازم ممنون