PDA

View Full Version : انتخاب رندم يه رکورد از ميان رکوردهاي غير منظم



mskarimi
چهارشنبه 27 خرداد 1388, 18:51 عصر
سلام.
يه تيبل دارم کو توش يه سري جمله نوشته شده. اين جمله ها پشت سر هم نيستند ( يعني به واسطه شرطي که توسط عبارت where نوشته مي شه ، جمله ها از سراسر جدول استخراج ميشن که ممکنه پشت سر هم يا با فاصله باشن.) حالا از ميان اين جمله ها مي خوام يکيش رو به صورت رندم انتخاب کنم و بلافاصله در يه جدول ديگه ذخيره کنم.
دوستان راهي به ذهنشون مي رسه ( لطفا کد پيشنهاديتون رو درج کنين)

(دستور select ... newid() ) رو پيدا کردم ولي نمي دونم چه جوري از اون تو sqldatasource استفاده کنم. چون من همه کارام رو از طريق formview انجام دادم)
با تشکر فراوان

reza_majid68
چهارشنبه 27 خرداد 1388, 20:50 عصر
به نظر من یه فیلد کلید برای جدولت انتخاب کن .
بعد تو برنامه یه عدد تصادفی تولید کن و بعد با where اون رکورد رو که با عدد تصادفی مطابقت میکنه رو هر جا که میخوای ذخیره کن .

mskarimi
جمعه 29 خرداد 1388, 16:46 عصر
به نظر من یه فیلد کلید برای جدولت انتخاب کن .
بعد تو برنامه یه عدد تصادفی تولید کن و بعد با where اون رکورد رو که با عدد تصادفی مطابقت میکنه رو هر جا که میخوای ذخیره کن .

خیلی ممنونم. ولی در اینصورت از کجا بدونم که باید بین چند تا چند عددی رو تولید کنم. ( انتهای بازه رو از کجا بیارم؟)

تشکر

Saber_Fatholahi
جمعه 29 خرداد 1388, 17:57 عصر
با دستور select count(*) from tbl می تونی تعداد رکورد های جدول بدست بیاری
موفق باشی

amirjalili
شنبه 30 خرداد 1388, 14:13 عصر
http://www.petefreitag.com/item/466.cfm
این لینک کمکت میکنه

kamrannazari
شنبه 06 تیر 1388, 20:43 عصر
متاسفانه اين روش ها كه گفتن(ابته با عرض پوزش از محضر اساتيد) استاندار نيست بهترين روش براي برگرداندت تعدادي ركورد تصادفي در sql نمونه كد زير است
select top 10 id,name,family,newid() as nid from student order by nid

newid()
هر بار يك كد يونيك برميگردونه كه اگر ركوردهاي برگردانيده شده رو بر اساس اون مرتب كنيم اين اتفاق مي افته

موفق باشد

khorsandreza
شنبه 06 تیر 1388, 22:48 عصر
سلام
دو تا روش هست
1 - با استفاده از دستور اس کیو ال مثال زیر

SELECT top(1) * FROM sokhanroz ORDER BY NEWID()

2- با استفاده از دستور#c

Random fixRand = new Random()

int selectrec = fixRand.Next(10);