PDA

View Full Version : جستجوی پیشرفته در دو جدول به صورت همزمان



farzane_t
پنج شنبه 03 مرداد 1392, 18:56 عصر
سلام
من با استفاده از این لینک جستجوی پیشرفته در یک جدول رو انجام دادم و مشکلی نبود :
http://barnamenevis.org/showthread.php?340305-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D9%86%D8%AC%D8%A7%D9%85-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%DB%8C-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%D8%AA%D9%88%D8%B3%D8%B7-%D8%A7%D8%B3%D8%AA%D9%88%D8%B1%D9%BE%D8%B1%D9%88%D 8%B3%DB%8C%D8%AC%D8%B1-stored-procedure&highlight=%D8%A2%D9%85%D9%88%D8%B2%D8%B4+%D8%A7%D9 %86%D8%AC%D8%A7%D9%85+%D8%AC%D8%B3%D8%AA%D8%AC%D9% 88%DB%8C+%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%8 7+%D8%AA%D9%88%D8%B3%D8%B7+%D8%A7%D8%B3%D8%AA%D9%8 8%D8%B1%D9%BE%D8%B1%D9%88%D8%B3%DB%8C%D8%AC%D8%B1+ stored+procedure
اما من میخوام جستجو در دو جدول به صورت همزمان انجام بشه ، برای اینکار از کد زیر استفاده کردم :


BEGIN TRANSACTION
(select 'download' as type , DlID as 'id', DLTitle as 'title',DlSummery as 'descp', DlPic as 'pic',DlDate as 'date' , DlView as 'view' from Downloads
where (DLTitle like ISNULL(@Title,DLTitle + '%' ) )and
(DlAuthor like ISNULL(@Author,DlAuthor + '%')) and
(DlCatID like ISNULL(@Subject,DlCatID )))
union
(select 'paper' as type , PID as 'id',PTitle as 'title',PaperSummary as 'descp', PaperPic as 'pic',PDate as 'date' ,PViewCount as 'view' from Papers
where (PTitle like ISNULL(@Title,PTitle + '%' ) )and
(PAuthor like ISNULL(@Author,PAuthor + '%' ) )and
(PCatID like ISNULL(@Subject,PCatID )))
COMMIT TRANSACTION


اما درست کار نمیکنه. مثلا من یه عنوان خاص رو در هر دو جدول دارم اما فقط واسه یک جدول رو توو خروجی نشون میده. مشکل چیه؟

ممنون میشم راهنماییم کنید.

محمد سلیم آبادی
جمعه 04 مرداد 1392, 02:55 صبح
سلام.
این query را اجرا کنید. احتمالا ایراد مربوط است به محتوای تابع ISNULL. شما باید % را با متغیر الحاق کنید نه نام ستون. ضمن اینکه در این مورد Transaction لزومی نداره، چون تنها یک عمل قرار است اجرا شود.

(select 'download' as type , DlID as 'id', DLTitle as 'title',DlSummery as 'descp', DlPic as 'pic',DlDate as 'date' , DlView as 'view' from Downloads
where (DLTitle like ISNULL(@Title+ '%',DLTitle ) )and
(DlAuthor like ISNULL(@Author+ '%',DlAuthor )) and
(DlCatID like ISNULL(@Subject,DlCatID )))
union
(select 'paper' as type , PID as 'id',PTitle as 'title',PaperSummary as 'descp', PaperPic as 'pic',PDate as 'date' ,PViewCount as 'view' from Papers
where (PTitle like ISNULL(@Title+ '%' ,PTitle ) )and
(PAuthor like ISNULL(@Author+ '%' ,PAuthor ) )and
(PCatID like ISNULL(@Subject,PCatID )))

farzane_t
جمعه 04 مرداد 1392, 15:50 عصر
خیلی ممنون.
اما هنوزم فقط نتیجه یک جدول رو نمایش میده. در حالیکه من در هر دو جدول عنوان "تست" رو دارم. پس خروجی باید دو رکورد باشه نه یکی :(

محمد سلیم آبادی
جمعه 04 مرداد 1392, 16:11 عصر
این کد را قبل از کوئری اجرا کنید
set ansi_nulls off