PDA

View Full Version : سوال: رندوم سازی سوالات آزمون فقط برای یک بار



rash44
شنبه 02 اسفند 1393, 08:30 صبح
سلام . در یک آزمون آنلاین زمانی که دانش آموزان وارد صفحه آزمون میشند سوالات به صورت رندوم برای اونها نمایش داده بشه و پس از ثبت جواب سوالات و یا رفرش صفحه ترتیب نمایش سوالات به هم نریزه (فقط یک بار سوالات به صورت تصادفی واکشی بشه) . از انجام این کار چه روشی رو پیشنهاد میکنید .

اگر از این کوئری استفاده کنم :


SELECT * FROM table ORDER BY rand(id)
پس از هربار رفرش کردن صفحه ترتیب نمایش سوالات به هم میریزه . به نظر خودم بیام برای بار اول 1 پارامتری رو توی دیتابیس ذخیره کنم که طبق همون پارامتر در دفعات بعدی سوالات رو واکشی کنم . ضمنا ترتیب نمایش سوالات باید برای هر دانش آموز متفاوات باشه .

love4php
شنبه 02 اسفند 1393, 10:03 صبح
دوست عزیز شما می توانید از یک عدد برای این کار استفاده کنید :
نمونه :


SELECT * FROM table ORDER BY rand(20)

rash44
شنبه 02 اسفند 1393, 12:45 عصر
دوست عزیز شما می توانید از یک عدد برای این کار استفاده کنید :
نمونه :


SELECT * FROM table ORDER BY rand(20)

در مثالی که شما 20 قرار دادین واکشی ها بر اساس چه پارامتری sort میشه ؟

MMSHFE
یک شنبه 03 اسفند 1393, 08:17 صبح
ابتدا برای هر دانش آموز با کوئری زیر سؤالات رو تصادفی استخراج کنید:
SELECT * FROM `questions` ORDER BY RAND();
یا اگه تعداد خاصی سؤال لازم دارین:
SELECT * FROM `questions` ORDER BY RAND() LIMIT 20;
حالا کافیه id سؤالاتی که استخراج شدن رو بریزین توی یک آرایه و با json_encode یا serialize یا implode تبدیل به متن کنید و توی یک جدول دیگه (مثلاً student_questions) ذخیره کنید. در دفعات بعد هم کافیه ببینید برای اون student خاص توی این جدول رکوردی هست یا نه و اگه بود، سؤالات رو ازهمینجا بخونید. البته تبدیل به متن کردن هم اختیاریه و میتونید رکوردهای جداگانه بگذارین (student_id, question_id). کاربرد اصلی تبدیل به متن کردن id سؤالات وقتیه که شما بخواین چندتا آزمون برگزار کنید. اینطوری برای هر آزمون یک فیلد student_id و یک فیلد exam_id دارین و یک فیلد هم question_ids هست که سؤالات رو داخلش ذخیره کردین.