نمایش نتایج 1 تا 16 از 16

نام تاپیک: انتخاب n رکورد به صورت Random :)

  1. #1
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    عالم ماده
    پست
    977

    انتخاب n رکورد به صورت Random :)

    برای Select د رکورد دلخواه (بر فرض 10 تا) بطور کاملا Random از جدول دیتابیس چه تغییراتی باید در فرمان Select اعمال نمود.
    :roll:
    Random:به این معناکه اگر 100 رکورد از 1 تا 100 داشته باشیم:
    رکورد های 3و 4و 67و 89و ... (20 تا) و 100 Select شوند.

    فرض بر اینست که جدول ما رکودی بنام Id دارد. :!:

  2. #2
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran - Tehran
    پست
    799
    میتونید فیلد آی دی رو طوری بسازید که به صورت ترتیبی بالا نره (مثلا از نوع GUID) ، و بعد از این دستور برای انتخاب رکورد های تصادفی استفاده کنید :

    SELECT TOP 10 * FROM(SELECT * FROM MyTable ORDER BY Id)

    روش بالا یکی از ساده ترین هاست ، روش های دیگه با پرداخت هزینه های دیگه (کم شدن سرعت و ...) هم وجود داره !

  3. #3
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    عالم ماده
    پست
    977
    متاسفانه در جدول فوق فیلد ID الزاما Identity هست!
    روش های دیگه با پرداخت هزینه های دیگه (کم شدن سرعت و ...) هم وجود داره !
    مهم نیست بفرمایید. :oops:
    فیلد آی دی رو طوری بسازید که به صورت ترتیبی بالا نره (مثلا از نوع GUID)
    منظور شما انتخاب نوع GUID در محیط انترپرایز است یا با ربنامه نویسی؟

  4. #4
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran - Tehran
    پست
    799
    من هم نگفتم Identity نباشه . شما میتونید در هنگام طراحی فیلد ها نوع فیلد Id رو از نوع uniqueidentifier انتخاب کنید و بعد برای اینزرت مقادیر جدید داخل این فیلد از دستور NEWID استفاده کنید (این دستور یه GUID جدید برمیگردونه ) .
    حتی اگه این اعداد ، مثلا به خاطر طولانی بودنشان یا ترتیبی نبودنشان مشکل زا هستند ، میتونید یه فیلد دیگه در کنار فیلد آی دی و از نوع uniqueidentifier داشته باشید.

  5. #5
    مهمان
    سلام

    شما میتونید در هنگام طراحی فیلد ها نوع فیلد Id رو از نوع uniqueidentifier انتخاب کنید و بعد برای اینزرت مقادیر جدید داخل این فیلد از دستور NEWID استفاده کنید
    خب با این روش فقط در اولین Select جواب میدهد. مثلا شما فرض کنید برای اولین بار دستور زیر را اجرا کنند:

    SELECT TOP 10 * FROM(SELECT * FROM MyTable ORDER BY Id)

    که جواب حداکثر 10 تا رکورد است. حال اگر دوباره دستور فوق را اجرا کنند باز همین 10 رکورد بازگردانده میشوند. خب اینکه نشد تصادفی!

  6. #6
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    عالم ماده
    پست
    977
    خب اینکه نشد تصادفی!
    I think so! :wink:

  7. #7
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran - Tehran
    پست
    799
    حق با شماست .
    برای صحیح کار کردن این روش قبل از دستور سلکت میتونید از این استفاده کنید :

    UPDATE MyTable SET Id=NEWID()


    راه های دیگه هم وجود داره ، شاید اصلا خود SQL هم روشی برای این کار داشته باشه . به هر حال نتیجه تحقیقات رو اینجا مینویسم . :skull:

  8. #8
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    عالم ماده
    پست
    977
    شاید اصلا خود SQL هم روشی برای این کار داشته باشه
    That is what i am looking for
    تشکر فرهاد خان

  9. #9
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran - Tehran
    پست
    799
    نتیجه تحقیحات :

    SELECT TOP 10 * FROM MyTable ORDER BY NEWID()

  10. #10
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    عالم ماده
    پست
    977
    برای اینزرت مقادیر جدید داخل این فیلد از دستور NEWID استفاده کنید (این دستور یه GUID جدید برمیگردونه ) .
    این مطلب الان هم معتبره؟
    ببینید جدول من اینه:
    [QID] [int] IDENTITY (1, 1) NOT NULL ,
    [CatId] [int] NOT NULL ,
    [QLevel] [tinyint] NOT NULL ,
    [Question] [nvarchar] (4000) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [DescAnswer] [nvarchar] (4000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
    [Answer] [tinyint] NULL

    این تابع را چگونه باید بکارببرم؟تنها در Select?

  11. #11
    مهمان
    نقل قول نوشته شده توسط Farhad.B.S
    نتیجه تحقیحات :

    SELECT TOP 10 * FROM MyTable ORDER BY NEWID()
    :) :)

  12. #12
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran - Tehran
    پست
    799
    دستوری که در بالا نوشتم روی هر جدول با هر نوع فیلد کار میکنه (حتی نیازی به وجود یک فیلد uniqueidentifier هم نیست) .

  13. #13
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    عالم ماده
    پست
    977
    حتی نیازی به وجود یک فیلد uniqueidentifier هم نیست
    در BooksOnline این نیاز هست چطور این درست کار می کنه(امتحان شد و درست بود:))
    در ضمن یک نکته مهم :
    من چند شرط هم در کوئری باید داشته باشم.نظیر:
    SELECT TOP 10 * FROM tblQBank ORDER BY NEWID() 
    where field_name <> 0


    پیغام خطا:

    Server: Msg 156, Level 15, State 1, Line 2
    Incorrect syntax near the keyword 'where'.

    ؟؟

  14. #14
    مهمان
    سلام


    SELECT TOP 10 * FROM tblQBank
    where field_name <> 0
    ORDER BY NEWID()

    :)

  15. #15
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    عالم ماده
    پست
    977
    :flower:

  16. #16
    کاربر دائمی
    تاریخ عضویت
    شهریور 1385
    محل زندگی
    فعلا خونه بابام
    پست
    329
    شرمنده که این پست قدیمی را فعال می کنم
    من این کد را در پراسیجر نوشتم و می خواستم مقدار ان را از یک فیلد تعریف شده بخواند خطا میدهد

    SELECT TOP @L1 idq FROM soal
    where idteacher = @idteacher and iddars = @idD and [level] = '1'
    ORDER BY NEWID()


    Server: Msg 170, Level 15, State 1, Procedure Ins_SelectQ, Line 13
    Line 13: Incorrect syntax near '@L1'.

تاپیک های مشابه

  1. مشکل اعداد Random و البته غیر تکراری
    نوشته شده توسط rosenth در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 6
    آخرین پست: دوشنبه 23 اردیبهشت 1392, 21:29 عصر
  2. انتخاب چند رکورد به صورت random ?
    نوشته شده توسط majid325 در بخش C#‎‎
    پاسخ: 23
    آخرین پست: سه شنبه 23 آبان 1385, 19:07 عصر
  3. کلاس Random
    نوشته شده توسط kiani_behzad در بخش C#‎‎
    پاسخ: 2
    آخرین پست: یک شنبه 14 آبان 1385, 19:39 عصر
  4. Random
    نوشته شده توسط مهدوی پور در بخش برنامه نویسی در 6 VB
    پاسخ: 2
    آخرین پست: پنج شنبه 03 فروردین 1385, 14:32 عصر
  5. سئوالی در مورد کار با فایلهای Random
    نوشته شده توسط Vahab در بخش VB.NET
    پاسخ: 2
    آخرین پست: جمعه 03 مرداد 1382, 07:13 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •