PDA

View Full Version : تولید سوال تصادفی- از هر گروه یک سوالبه صورت تصادفی تولید شود



reza4359
جمعه 26 آذر 1395, 17:24 عصر
با سلام دوستان
من تو برنامه چند گروه تعریف کردم حالا میخوام از هر گروه به صورت تصادفی یک سوال تولید کنه
به نظر شما فیلد گروه را در جدول سوالات قرار بدم یا یک جدول دیگه براش ایجاد کنم و join کنم چه کار کنم؟
باید چکار کرد ؟
ممنون

reza4359
شنبه 27 آذر 1395, 14:30 عصر
دوستان کسی میتونه راهنمایی کنه
من در برنامه ممکنه چند تا سوال وارد یک گروه بشه حالا میخوام از هر گروه یک سوال داشته باشم باید چکار کنم؟
چه کوئری را باید به کار ببرم؟
لطفا راهنمایی کنید ممنون میشم

Mahmoud.Afrad
شنبه 27 آذر 1395, 18:37 عصر
یک جدول مجزا برای گروه. یک جدول واسط برای تعیین گروه هر سوال.
گروهبندی کنید و توسط rownumber به رکوردهای هر گروه شماره ردیف بدید و ردیف اول از هر گروه رو انتخاب کنید
http://stackoverflow.com/a/6841644
برای تصادفی بودن هم کافیه مرتب سازی بعد از پارتیشن بندی رو تصادفی انجام بدید طبق لینک زیر
http://stackoverflow.com/a/19419

reza4359
شنبه 27 آذر 1395, 20:49 عصر
یک جدول مجزا برای گروه. یک جدول واسط برای تعیین گروه هر سوال.
گروهبندی کنید و توسط rownumber به رکوردهای هر گروه شماره ردیف بدید و ردیف اول از هر گروه رو انتخاب کنید
http://stackoverflow.com/a/6841644
برای تصادفی بودن هم کافیه مرتب سازی بعد از پارتیشن بندی رو تصادفی انجام بدید طبق لینک زیر
http://stackoverflow.com/a/19419
ممنون آقای افراد
منظور از این قسمت چیه میشه توضیح بدهید

توسط rownumber به رکوردهای هر گروه شماره ردیف بدید و ردیف اول از هر گروه رو انتخاب کنید
چطوری شماره ردیف بدیم؟داده های ما توسط کاربر وارد میشه مثلا نام هر گروه توسط کاربر به جدول گروه ها ثبت میشه
میشه این قسمت را با کد توضیح بدید

reza4359
یک شنبه 28 آذر 1395, 17:19 عصر
من از این اسکریپت استفاده میکنم

USE [exam]
GO
/****** Object: StoredProcedure [dbo].[ReportQuestionByGroup] Script Date: 18/12/2016 17:39:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Proc [dbo].[ReportQuestionByGroup]
@groupid int
as
Select tbl_soal.GroupID , questest , ans ,ans1,ans2,
ans3 from tbl_soal INNER JOIN tbl_group
on tbl_soal.GroupID = tbl_group.GroupID where tbl_soal.GroupID = @groupid


SqlConnection con1 = new SqlConnection(strCon);

SqlDataAdapter da2 = new SqlDataAdapter("ReportQuestionByGroup", con1);
da2.SelectCommand.CommandType = CommandType.StoredProcedure;
dtAllQuestion = new DataTable();
da2.SelectCommand.Parameters.AddWithValue("@GroupID", comboBox1.SelectedValue);
da2.Fill(dtAllQuestion);




label4.Text = dtAllQuestion.Rows[QN]["questest"].ToString();
buttonX6.Text = dtAllQuestion.Rows[QN]["ans"].ToString();
buttonX7.Text = dtAllQuestion.Rows[QN]["ans1"].ToString();
buttonX8.Text = dtAllQuestion.Rows[QN]["ans2"].ToString();
buttonX9.Text = dtAllQuestion.Rows[QN]["ans3"].ToString();

ولی موقع اجرا به @groupid گیر میده اینم پیغام خطاش

{"Procedure or function 'ReportQuestionByGroup' expects parameter '@groupid', which was not supplied."}

codedeveloper
دوشنبه 29 آذر 1395, 10:32 صبح
SELECT ROW_NUMBER() OVER (PARTITION BY GroupId ORDER BY RANDOM() LIMIT 1) AS rn,
Questions.QuestionText
FROM Groups
JOIN Questions ON Groups.GroupId = Questions.GroupId
WHERE rn=1