ورود

View Full Version : انتخاب تصادفی رکور ها؟



امیر-نا
جمعه 11 دی 1383, 19:48 عصر
سلام
یه سوال چه طوری میشه از یک بانک اطلاعاتی هر بار یک سیری اطلاعات را به صورت تصادفی اسنفاده کرد.
مثلا هر دفعه 10 داده به طور تصادفی از بانک صدا زده شود.
بانک از نوع اکسس است.

دستورات SQL که در قسمت SQL بود نوشتم ولی نشد؟؟؟

ممنون امیر

Mahdi_S_T
یک شنبه 13 دی 1383, 08:49 صبح
شاید یه کار ابتدایی این باشد که از تابع Random استفاده کنی

امیر-نا
یک شنبه 13 دی 1383, 13:28 عصر
نمی دونم چه جوری ازش استفاده کنم؟



ممنون

vcldeveloper
دوشنبه 14 دی 1383, 03:05 صبح
می تونی برای رکوردهای جدولت یه فیلد Index درست کنی که به هر رکورد یه عدد نسبت بده.
بعد از این کار میتونی از تابع Random به این شکل استفاده کنی:


My Number = Random(Max Number)

بجای Max Number می تونی بزرگترین عددی رو که میخوای در جستجوی اعداد تصادفی پیدا بشه می نویسی. مثلا اگه Max Number = 1000 باشه یعنی تابع Random باید عددی بین صفر تا هزار رو بصورت تصادفی پیدا کنه.
بعد از بدست آوردن عدد تصادفی مورد نظر می تونی رکورد متناظر با اون عدد رو از داخل جدول پیدا کنی.
البته برای اینکه در هر بار اجرای برنام ات اعداد تصادفی یکسانی بدست نیاد باید از دستور Randomized هم در یه جایی از کد برنامه ات استفاده کنی (مثلا در شروع تابع جستجو یا در OnCreate فرم برنامه). برای اطلاعات بیشتر می تونی به راهنمای دلفی مراجعه کنی.

Panje Tala
دوشنبه 14 دی 1383, 09:44 صبح
با سلام
در BDE میتوانی از کد زیر استفاده کنی:


table1.First;
table1.MoveBy(random(table1.RecordCount)+1);

_alish_
دوشنبه 14 دی 1383, 10:17 صبح
یا اگر خواستی یک Dataset از Random داشته باشی باید یک PK یا AutoNumber قرار دهی
و پس از آن به تعدادی که خواستی یک حلقه For که Random در آن قرار دارد کدی بنویس و مقدار را در Str Set کن

Select
From
Where ID In (1,10,20,2)
ٌWhere ID In (Str)

FirstLine
جمعه 18 دی 1383, 18:10 عصر
با سلام
بهترین راه :wink:

SELECT TOP 10 * FROM Public_Text ORDER BY NEWID()
با تشکر

امیر-نا
سه شنبه 22 دی 1383, 19:28 عصر
با سلام و تشکر از همه دوستانی که زحمت کشیدند.
سر انجام موفق شدم به این کد برسم



var
x:array[1..5]of integer;
i:integer;
s:string;
begin
for i:=1 to 5 do
begin
Randomize();
x[i]:=RandomRange(1,10);
memo1.Lines.Add(inttostr(x[i]));
end;
s:='select * from table2 where id in('+inttostr(x[1])+','+inttostr(x[2])+','+inttost r(x[3])+')';
ADOQuery1.SQL.Add(s);
ADOQuery1.Active:=true;




ولی الان این مشکل هست که ممکنه در هنگام ایجاد اعداد تصادفی دو یا چند عدد برابر تولید بشه ؟
راه حلی برای این مشکل دارین یا نه؟
یعنی تولید اعداد تصادفی متمایز

ممنون
امیر

Delphi KDE
چهارشنبه 23 دی 1383, 02:48 صبح
ولی الان این مشکل هست که ممکنه در هنگام ایجاد اعداد تصادفی دو یا چند عدد برابر تولید بشه ؟
راه حلی برای این مشکل دارین یا نه؟
یعنی تولید اعداد تصادفی متمایز
برای این منظور میتونی از یک ارایه استفاده کنی و هر با اجرای رندوم چک کنی عدد تولید شده در ارایه از قبل وجود دارد یا خیر در صورتی که وجود نداشت عدد را در ارایه وارد کن

امیر-نا
پنج شنبه 24 دی 1383, 10:26 صبح
با سلام
ممنون از اینکه وقت می زارین
ولی می دونین چقدر طول میکشه

Panje Tala
چهارشنبه 30 دی 1383, 09:53 صبح
باسلام
شاید راه بهتری باشه ولی روی این نظر هم میتونی کار کنی: ابتدا یک Query از بانک سوالات بزن وهمه رکوردها را انتخاب کن.بعد یک عدد Random را بااستفاده از توابع مربوطه انتخاب کن.سپس به رکوردی که عدد تصادفی اشاره میکنه برو و سوال انتخاب شده را در بانک سوالات انتخابی قرار بده .بعد رکورد انتخاب شده را پاک کن.و این عمل را تکرار کن تا به تعداد سوالات دلخواه برسی. در هر مرحله تعداد رکوردها یکی کم میشود که باید عدد تصادفی را باتوجه به تعداد رکوردها انتخاب کنی.به نظرم این روش سریعتر است و احتمال ایجادloop را از بین می برد.

MiRHaDi
پنج شنبه 01 بهمن 1383, 11:56 صبح
سلام
خوب از یک Calculated Field استفاده کن و کدش رو قرار بده که با Random پرش کنه ! بعد با اون Sort کن و 10 تاشو بردار
بای