PDA

View Full Version : سوال: نشون دادن چند result از کوئری در یک ریپیتر!؟



moslem.hady
چهارشنبه 12 بهمن 1390, 00:10 صبح
سلام . من توی یه کوئری چندتا select دارم. مثلا سلکت اولم خبرهای ورزشی، سلکت دوم خبرهای سیاسی و...
پس همه رو میشه توی یه ریپیتر نشون داد. اما وقتی دیتاسورس رو به ریپیتر وصل میکنم فقط result سلکت اولی رو نشون میده. من برای نمایش هر سلکت یه ریپیتر گذاشتم و...
میخوام همه سلکت ها رو با هم توی ریپیتر بیارم. مثلا با ()Result.Next یا همچین چیزی. کسی میتونه راهنمایی کنه؟

mahmood_4246
چهارشنبه 12 بهمن 1390, 01:09 صبح
از union برای ادغام مقادیر جدول استفاده کنید

moslem.hady
چهارشنبه 12 بهمن 1390, 01:28 صبح
ممنون. من با newID به صورت رندم انتخاب میکنم. بخاطر همین union مشکل داره.
با توجه به این لینک
http://www.sqlservercentral.com/Forums/Topic561702-8-1.aspx
مشکل union حل شد. ولی نمیدونم چرا رندمش درست کار نمیکنه. هر 7-8 بار رفرش یه بار رندم کار میکنه!!

vahid.ch013
چهارشنبه 12 بهمن 1390, 09:21 صبح
سلام . من توی یه کوئری چندتا select دارم. مثلا سلکت اولم خبرهای ورزشی، سلکت دوم خبرهای سیاسی و...
پس همه رو میشه توی یه ریپیتر نشون داد. اما وقتی دیتاسورس رو به ریپیتر وصل میکنم فقط result سلکت اولی رو نشون میده. من برای نمایش هر سلکت یه ریپیتر گذاشتم و...
میخوام همه سلکت ها رو با هم توی ریپیتر بیارم. مثلا با ()Result.Next یا همچین چیزی. کسی میتونه راهنمایی کنه؟
به نظر من استفاده از union راه مناسبی برای این کار نیست، فرض کنید کل داده هاتون رو یک بار باید Select کنید و بعد نمایش بدید.
حال فرض کند رکوردهای موجود در جدول 2،000،000 عدد باشه،هر زمان که میخواهید این کار رو انجام بدید باید کل داده ها رو select کنید.
پیشنهاد میکنم از خواصیت next() شی DataReader استفاده کنید:
Create Procedure Select
(
@Name nvarchar(500),
@Type nvarchar(100)
)
AS
BEGIN
IF @Type='ورزشی'
BEGIN
Select * from Table1 where Name=@Name
and Type=@Type;
END
..
...

..
END

private void ....(.....)
{
using (sqldatareader dr=search(Name,Type)
{
if(type=="ورزشی")
{
repeater.datasource=dr;
repeater.bind();
}
dr.nextresult();
if(type=="سیاس")
{
repeater.datasource=dr;
repeater.bind();
}
}
}

moslem.hady
چهارشنبه 12 بهمن 1390, 13:22 عصر
private void ....(.....){using (sqldatareader dr=search(Name,Type){if(type=="ورزشی"){repeater.datasource=dr;repeater.bind();}dr.nextr esult();if(type=="سیاس"){repeater.datasource=dr;repeater.bind();}}}این کد شما شرط داره. من میخوام همه داده ها رو نشون بده.


به نظر من استفاده از union راه مناسبی برای این کار نیستچرا؟
الان من با union درستش کردم. اما چون میخوام به صورت رندم باشه، رندمم کار نمیکنه. البته شاید مشکل از انتخاب درصدی باشه.کد من شبیه اینه:

select * from (
select * from (SELECT top(100)PERCENT ID, Title, Pic, NEWID() AS ANewID
FROM News where NewsType=1 order by newid())d1
Union
select * from (SELECT top(50)PERCENT ID, Title, Pic, NEWID() AS ANewID
FROM News where NewsType=2 order by newid())d2
) as c order by Date desc
اون سلکت اول که 100 درصد انتخاب میکنه رندمش کار نمیکنه.