PDA

View Full Version : حرفه ای: نظر سنجی



foad.fartash
دوشنبه 11 اسفند 1393, 22:46 عصر
سلام دوستان من یه فرم نظر سنجی دارم که می خوام به صورت آمار نشون بدم حالا مشگل اینجاست که می خوام گزینه های ارسالی و از کاربر بگیره و بعد تو دیتابیس به هر کدوم یه مقدار اضافه کنه اما نمی دونم چه طوریه ! کمک کنید لطفا ::لبخندساده: ممنونم ازتون

foad.fartash
چهارشنبه 13 اسفند 1393, 08:44 صبح
کسی نیست جواب بده ؟!

rambod18
چهارشنبه 13 اسفند 1393, 08:54 صبح
منظورت رو نفهمیدم. اطلاعات نظر سنجی رو می خوای ذخیره کنی؟ به اطلاعات نظر سنجی می خوای چیزی اضافه کنی بعد ذخیره کنید؟ تو خود بانک بهش اضافه بشه یا اول اضافه بشه مقدار بعد تو بانک ذخیره بشه؟

vahidqara
چهارشنبه 13 اسفند 1393, 09:30 صبح
درود دوست خوب...
شما یه فیلد number برای هر کدام از گزینه ها در نظر بگیرید و برای هر بار ثبت نظر یکی به اون اضافه کنید

طراحی و پیاده سازی وب سایت (http://www.wintowin.ir)

foad.fartash
چهارشنبه 13 اسفند 1393, 11:19 صبح
سلام دوستان ممنونم از نظر‌هاتون مشگل من اینجاس که می‌خوام یوزر وقتی‌ یکی‌ از گزینها‌رو سابمیت می‌کنه مقدار اون نظر تو دیتابیس یه واحد افزایش پیدا کنه دیتابیس نوشته شده سوال‌ها و گزینه‌ها تو دیتابیس هستن فقط همین مونده که نمیدونم چی‌ کار کنم129073

نیلوفر66
چهارشنبه 13 اسفند 1393, 12:25 عصر
خب با توجه به آی دی سوال و آی دی جواب یک واحد اضافه کن





for($i=0;$i<count($answers);$i++)
mysql_query("UPDATE poll_answers SET votes=votes+1 WHERE id='$answers[$i]'");

foad.fartash
چهارشنبه 13 اسفند 1393, 13:00 عصر
می شه یه کم بیشتر توضیح بدین ؟

golbafan
چهارشنبه 13 اسفند 1393, 13:11 عصر
سلام دوستان ممنونم از نظر‌هاتون مشگل من اینجاس که می‌خوام یوزر وقتی‌ یکی‌ از گزینها‌رو سابمیت می‌کنه مقدار اون نظر تو دیتابیس یه واحد افزایش پیدا کنه دیتابیس نوشته شده سوال‌ها و گزینه‌ها تو دیتابیس هستن فقط همین مونده که نمیدونم چی‌ کار کنم

بنظر من این روشی که شما پیش گرفتید درست نیست چون اگر 100 نفر همزمان فرم رو تایید کنن ممکنه دیتابیس شما نتونه درست از پس ادیت کردن فیلدها بر بیاد. شما با هر نظر باید یک رکورد اضافه کنید و برای آمار گیری اونها رو جمع بزنید


مثال:
فرض کنیم سوالات تستی باشند اونوقت برای ثبت اطلاعات کافیه جدول زیر رو ایجاد کنید:

ردیف: بصورت یونیک و کلید اصلی
کد پاسخ دهنده: عدد
شماره فرم سوال: عدد (فرض کنید که بخواهید سال دیگه فرم جدیدی درست کنید)
شماره سوال: عدد
گزینه انتخابی: عدد

حالا با سابمیت سدن فرم باید بر اساس گزینه های انتخابی این جدول رو پر کنید

مثال: من کاربر شماره 1 و شما 2 هستید و فرم سوالات شماره 2 رو پر میکنم که 5 سوال تستی داره:

ردیف - کد کاربر - فرم سوال - شماره سوال - گزینه
1........1............2...............1........... ........4.......
2........1............2...............2........... ........2.......
3........1............2...............3........... ........3.......
4........1............2...............4........... ........4.......
5........1............2...............5........... ........1.......

6........2............2...............1........... ........1.......
7........2............2...............2........... ........1.......
8........2............2...............3........... ........4.......
9........2............2...............4........... ........2.......
10......2............2...............5............ .......4.......

حالا برای آمارگیری میتونید به تفکیک فرم و یا به تفکیک سوال و یا هر تفکیکی دوست دارید آمار بگیرید...

با استفاده از دستور sum و group by

foad.fartash
چهارشنبه 13 اسفند 1393, 13:22 عصر
می شه یکم بیشتر توضیح بدید ؟!129079129080

golbafan
چهارشنبه 13 اسفند 1393, 13:38 عصر
این که عرض کردم جدول جوابها بود دوست عزیز و از جدول سوالات جداست
شما نباید جوابها رو در جدول سوالات بزارید و باید جداگانه باشه

ببینید علاوه بر اونچه که قبلا توضیح دادم شما به جداول دیگه ای هم احتیاج دارید:



جدول فرم سوال شامل:
1- ردیف فرم(کلید اصلی)
2- مشخصات فرم سوال

جدول سوالات شامل:
1- ردیف سوال(کلید اصلی)
2- ردیف فرم سوال
3- شماره سوال
4- متن سوال

جدول گزینه ها شامل:
1- ردیف گزینه (کلید اصلی)
2- ردیف سوال
3- شماره گزینه
4- متن گزینه
129081

MMSHFE
چهارشنبه 13 اسفند 1393, 13:44 عصر
راه مناسبتر بجای درج رکورد برای هر جواب (که مشکل افزونگی و حجم زیاد رو داره) اینه که از همون افزایش شمارنده استفاده بشه با این تفاوت که از قفلها هم کمک بگیریم و قبل از بروزرسانی جدول رو قفل کنیم و وقتی کارمون تمام شد، قفل رو آزاد کنیم. چون پردازشهای MySQL خیلی سریع هستن، مشکلی پیش نمیاد و اگه چند نفر همزمان درخواست بدن، اولین نفری که قفل رو بگیره کار میکنه و نفرات بعد توی صف منتظر میمونن تا قفل آزاد بشه.

golbafan
چهارشنبه 13 اسفند 1393, 14:01 عصر
راه مناسبتر بجای درج رکورد برای هر جواب (که مشکل افزونگی و حجم زیاد رو داره) اینه که از همون افزایش شمارنده استفاده بشه با این تفاوت که از قفلها هم کمک بگیریم و قبل از بروزرسانی جدول رو قفل کنیم و وقتی کارمون تمام شد، قفل رو آزاد کنیم. چون پردازشهای MySQL خیلی سریع هستن، مشکلی پیش نمیاد و اگه چند نفر همزمان درخواست بدن، اولین نفری که قفل رو بگیره کار میکنه و نفرات بعد توی صف منتظر میمونن تا قفل آزاد بشه.

البته این روش اصولی نیست
اگر بخواد حتی از این روش هم استفاده کنه باز هم راه درستش اینه که یک جدول برای جمع بندی داده ها داشته باشه و مثلا هر وقت 100.000 رکورد ثبت شد اونها رو جمع بزنه و در جدول جمع بندی قرار بده و تنها اگر محدودیت فضا داره جدول قبلی رو پاک کنه

---
با سرور های امروزی و با توجه به سادگی داده های دوستمون میشه میلیارها رکورد رو در یک سرور معمولی ذخیره کرد...

درسته سرعت mysql زیاده ولی نمیشه با فقل کردن و آزاد سازی پیاپی جداول بیشتر از 100 ویرایش در ثانیه ثبت کرد و تغییر داد
همونطور که میدونید سرعت update بسیار کمتر از append است مخصوصا اگر lock هم اضافه بشه