PDA

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



M * M * A
چهارشنبه 27 تیر 1386, 11:54 صبح
با سلام
من یک جدول دارم که شامل کد دانشجو و اسم اون می باشد.
من می خوام دستوری بنویسم که چند تا عدد تصادفی بدون تکرار تولید کند که به من بعد اسم اون شماره رو بده .مثلا برای 10 نفر. 10 تا شماره غیر تکراری تولید کندهو به من خروجی 10 تا اسم غیر تکراری بده.
من این تقاضا را در مباحث مربوط به sql کردم و لی جوابی نگرفتم.
کد ها زیر رو به من دادن ولی جواب نمیدن.

DECLARE @counter smallint
SET @counter = 1
WHILE @counter < 10
BEGIN
SELECT cast(RAND()*100 as int)
SET @counter = @counter + 1
END
اگر میشه یک توضیحی بدهد.

ARA
چهارشنبه 27 تیر 1386, 16:16 عصر
میشه دقیقتر بگین

میخواین این قسمت کد رو با c# بنویسین یا اینکه با sql این چیزی که من میبینم یک عدد رندوم بین 0 تا 100 میده اونهم 10 بار ؟؟؟ اسمی از جدولی چیزی نیومده
احتمالا فکر کردند که بقیه اش رو خودت بنویسی که این 10 عدد هم کلید های جدول باشه
ولی آیا کد دانشجویی بین 1 تا 10

فکر کنم میخواهید 10 تا رکورد رندوم رو با یک اجرای sql بخونین ؟؟

باید یک کم در مورد کلیدتون بیشتر توضیح بدین فکر نکنم همش رو بتونین با یک دستور sql اجرا کنین

shahrzad2
چهارشنبه 27 تیر 1386, 16:41 عصر
با سلام
من یک جدول دارم که شامل کد دانشجو و اسم اون می باشد.
من می خوام دستوری بنویسم که چند تا عدد تصادفی بدون تکرار تولید کند که به من بعد اسم اون شماره رو بده .مثلا برای 10 نفر. 10 تا شماره غیر تکراری تولید کندهو به من خروجی 10 تا اسم غیر تکراری بده.
من این تقاضا را در مباحث مربوط به sql کردم و لی جوابی نگرفتم.
کد ها زیر رو به من دادن ولی جواب نمیدن.

DECLARE @counter smallint
SET @counter = 1
WHILE @counter < 10
BEGIN
SELECT cast(RAND()*100 as int)
SET @counter = @counter + 1
END
اگر میشه یک توضیحی بدهد.
می تونید یه تابع random بنویسید من در برنامه خودم که با sql بوده نوشتم و جواب گرفتم

publicvoid searchword()
{
int a = Convert.ToInt16(cmblevel.Text);
int z = 1, i = 0, q = 0;
Random r = newRandom();
do
{
if (i <= 1) q = r.Next(1, a);
elseif (i > 1) q = r.Next(z, a);
if (a <= 5)
{
z = 1;
a++;
}
else
{
z = a;
a = a + 5;
}
if (a > 205 || z >= 205)
{
z = a -9;
a = 205;
}
SqlConnection objConnection = newSqlConnection("Data Source=localhost;Initial Catalog=prjtype;Integrated Security=True");
SqlCommand objcommand = newSqlCommand();
objcommand.Parameters.Add("@q", SqlDbType.Int);
objcommand.Parameters["@q"].Value = q;
string s = "select tblptype.word from tblptype where tblptype.code=' " + @q.ToString() + " ' ";
SqlCommand objCommand = newSqlCommand(s, objConnection);
objConnection.Open();
SqlDataReader objdatareader = objCommand.ExecuteReader();
objdatareader.Read();
richTextBox1.Text = objdatareader["word"].ToString() + ' ' + richTextBox1.Text;
objdatareader.Close();
i++;
} while (i < 10);
}

البته تکراری نبودنش را هم می تونید چک کنید

Amir Oveisi
پنج شنبه 28 تیر 1386, 15:30 عصر
برای تکراری نبودنش همیشه آخرین کلید رو با یه عدد Random ( مثلا بین 1 تا 10 ) جمع کنید
یعنی مقدار هر کلید = مقدار کلید قبلی + یه عدد Random بین 1 و 10 (مثلا)

a_safyari
پنج شنبه 28 تیر 1386, 23:50 عصر
سلام
متاسفانه کلاس Random در Net. عدد تکراری میده .
برای این کار میتونید از یک ArrayList و یک آرایه استفاده کنید .
یعنی یک ArrayList درست کن و محدوده موردنظر از اعدادت رو توش بریز.
از اون ArrayList اعداد را به صورت تصادفی بخون و در آرابه بریز .

PC2st
جمعه 29 تیر 1386, 00:06 صبح
متاسفانه کلاس Random در Net. عدد تکراری میده .
اگر یک شئ از random بسازیم و از متد next استفاده کنیم، عددهای بعدی، جدید هستند.

a_safyari
جمعه 29 تیر 1386, 00:17 صبح
متاسفانه کلاس Random در Net. عدد تکراری میده .
اگر یک شئ از random بسازیم و از متد next استفاده کنیم، عددهای بعدی، جدید هستند.
دوست عزیز متاسفانه اگه در حلقه for این کار رو بکنی اعداد تکراری هم خواهی داشت حتی اگه از متد Next استفاده کنی !!!!!!

mahdishojaee
جمعه 29 تیر 1386, 00:40 صبح
select TOP 1 PERCENT * from [tblName] ORDER BY NEWID()
این دستور یه رکورد به صورت راندوم و غیر تکراری میده .

cactuskhan
چهارشنبه 08 خرداد 1387, 12:58 عصر
select TOP 1 PERCENT * from [tblName] ORDER BY NEWID()
این دستور یه رکورد به صورت راندوم و غیر تکراری میده .


این دستور به من فقط رکورد اول بانک رو بر میگردونه ! مگه نباید از بین رکورد های جدول یکی رو بصورت رندوم برگردونه ؟؟

لطفا کمک کنید !!!:متفکر:

Pouria.NET
چهارشنبه 08 خرداد 1387, 16:37 عصر
Randomize رو باید استفاده کنید تا Random.Next عدد تکراری نده