الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

فكرة تصميم جداول لاستبيان متعدد المدخلات

مغلق
بدأه أبو محمد اللحياني في 18 يوليو 2006 · 2 رد · 6,398 مشاهدة · في قواعد بيانات MySQL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

فكرة تصميم جداول لاستبيان متعدد المدخلات

نشاهد الكثير من المواقع تسأل زوارها عن بعض الموضوعات ؟ ولكن العرض لهذا التصويت قديم وعقيم ولا يعطي الزائر حرية في إبداء ما عنده في هذا الموضوع .

فالزائر قد يرى أن هناك بنداً تم تجاهله أو الغفلة عنه ؟ أو عنده ما يقوله في سبب اختياره ، ويرى أنه مهم !!

سنعطي أمثلة على استبيان وفقراته حتى تتضح صورته

الاستبيان عند القارئ في صفحة ويب :

يعطي فكرة وتصور عن الهدف والأهمية له 'info'

يحتوي على عدة فقرات ، كل فقرة لها بند أو عدة بنود، كل فقرة لها عنوان هو عبارة عن سؤال

فقرة ( 1 ) - مثلاً - : فيها عدة خيارات radio

وفقرة ( 2 ) : فيها select ويحدد خيار واحد ، مثلاً في أي دولة تسكن ؟

وفقرة رقم ( 2 ) لا تختلف عن الفقرة رقم ( 1 ) في طريقة التصميم ولكن تختلف في طريقة العرض .

وهاتين الفقرتين لا إشكال في تصميم قاعدة بياناتها

ولكن الإشكال في تصميم وتكييف الحل للفقرات التالية:

وفقرة ( 3 ) فيها أيضاً select multiple أي يستطيع أن يحدد عدة خيارات معاً

وفقرة ( 4 ) يدخل فيها رقماً مثلاً كم عمرك ؟

وفقرة ( 5 ) يدخل فيها نصاً ، مثلاً ما رأيك في ... ؟

فقرة ( 6 ) - مثلاً - : فيها عدة خيارات radio وسؤال عن سبب الاختيار أي أنه يدخل نصاً

جدول الاستبيان - الذي يجمع لفيف الفقرات - :

CREATE TABLE `polls` (
  `id` tinyint(10) NOT NULL auto_increment,
  `poll` varchar(100) NOT NULL default '', -- عنوان الاستبيان
  `infoid` tinyint(4) NOT NULL default '0', -- رقم الفكرة
  `jdate` date NOT NULL default '0000-00-00',
  `timeout` date NOT NULL default '0000-00-00', -- وقت انتهاء الاستبيان
  `visible` smallint(1) NOT NULL default '0', -- هل الاستبيان ظاهر هنا يتم إخفاءه
  `close` smallint(1) NOT NULL default '0', -- إغلاق الاستبيان
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1;

بالنسبة لجدول مجموعة البنود

CREATE TABLE `GVotes` (
  `id` tinyint(10) NOT NULL auto_increment, 
  `pollid` tinyint(10) NOT NULL default '0', -- رقم الاستبيان
  `infoid` tinyint(4) NOT NULL default '0', -- رقم الفكرة
  `groupname` varchar(100) NOT NULL default '', -- نص السؤال(بند التصويت)
  `whyvoted` varchar(100) NOT NULL default '', -- سبب الاختيار
  `voters` tinyint(10) NOT NULL default '0', -- عدد المشاركين في الاستبيان (الأصوات)
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1;

بالنسبة لجدول خيارات التصويت

CREATE TABLE `votes` (
  `id` tinyint(10) NOT NULL auto_increment, 
  `gvid` tinyint(10) NOT NULL default '0', -- رقم المجموعة التي ينتمي إليها 
  `vote` varchar(100) NOT NULL default '', -- نص السؤال(بند التصويت)
  `counter` tinyint(10) NOT NULL default '0', -- عدد المختارين لهذا البند
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1;

وهذا جدول النبذة وفيه يتم تخزين نبذة عن كل استبيان وعن كل مجموعة بنود إن إن أحب مدير الاستبيان ذلك

لأنه ليس كل استبيان أو مجموعة بنود يكون لها إيضاح

CREATE TABLE `infos` (
  `id` tinyint(4) unsigned NOT NULL auto_increment,
  `info` text NOT NULL,
  PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1;

أرجو من الأخوة الأعضاء المشاركة وإعطاء حلول لطريقة الاستبيان هذه

تم تعديل هذه المشاركة بواسطة أبو محمد اللحياني في 18 يوليو 2006 في 16:40

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#2

ما تكون تستعمل الكلمة id للحقول، دايمن استعمل اسم مفيد..

وبدل حقلين لليوم والوقت، استعمل حقل واحد

CREATE TABLE `polls` (
  `pollid` tinyint(10) NOT NULL auto_increment,
  `poll` varchar(100) NOT NULL default '', -- عنوان الاستبيان
  `infoid` tinyint(4) NOT NULL default '0', -- رقم الفكرة
  `jdate` datetime NOT NULL default '0000-00-00 00:00:00',
  `visible` smallint(1) NOT NULL default '0', -- هل الاستبيان ظاهر هنا يتم إخفاءه
  `close` smallint(1) NOT NULL default '0', -- إغلاق الاستبيان
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1;

اما عن الجدول الثاني نفس الفطرة...

واو انا ما استعمل الحقل votes وبالمستقبل استعمل دالى COUNT(*) للحصول على العدد....

CREATE TABLE `GVotes` (
  `gvoteid` tinyint(10) NOT NULL auto_increment,
  `pollid` tinyint(10) NOT NULL default '0', -- رقم الاستبيان
  `infoid` tinyint(4) NOT NULL default '0', -- رقم الفكرة
  `groupname` varchar(100) NOT NULL default '', -- نص السؤال(بند التصويت)
  `whyvoted` varchar(100) NOT NULL default '', -- سبب الاختيار
  `voters` tinyint(10) NOT NULL default '0', -- عدد المشاركين في الاستبيان (الأصوات)
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1;

نفس الفكرة بالحثل counter

CREATE TABLE `votes` (
  `voteid` tinyint(10) NOT NULL auto_increment,
  `gvoteidd` tinyint(10) NOT NULL default '0', -- رقم المجموعة التي ينتمي إليها
  `vote` varchar(100) NOT NULL default '', -- نص السؤال(بند التصويت)
  `counter` tinyint(10) NOT NULL default '0', -- عدد المختارين لهذا البند
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1;

CREATE TABLE `infos` (
  `infoid` tinyint(4) unsigned NOT NULL auto_increment,
  `info` text NOT NULL,
  PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1;

مع السلامة

#3

أنا سألت سؤال ما أحد أجاب عليه وهو لما قلت (ولكن الإشكال في تصميم وتكييف الحل للفقرات التالية:).

لم أعرف كيف أصمم لها جدول أو عمل خاص ولكن الله يجيب الخير .

اقتباس
ما تكون تستعمل الكلمة id للحقول، دايمن -(دائماً)- استعمل اسم مفيد..

فكرة جيدة .

اقتباس
وبدل حقلين لليوم والوقت، استعمل حقل واحد

الحقل jdate هو للتاريخ المسيحي والحقل hdate هو للتاريخ الهجري .

وهناك كود يحول من التاريخ المسيحي إلى التاريخ الهجري ولكن من الصعب عند إظهار بيانات التواريخ أن تحول كل مرة ، فالأولى هو تخزين التاريخ في قاعدة البيانات.

وهناك خطأ آخر في تصميم قواعد البيانات هذه في جدول مجموعة التصوث GVotes وهو الحقل المسمى whyvoted

`whyvoted` varchar(100) NOT NULL default '',

المفترض أن يكون في الجدول votes

لكن ما عندك أحد ولا أحد اهتم بالموضوع أصلاً ، ولعله غير مهم، وربك كريم .

وهو الآن بهذه الكيفية مفيد ، وخاصة أن أكثر الشركات والهيئات الحكومية والعلمية لما تضع استبيان دراسة لحالة أو فئة معينة لا تكثر من النصوص بل كلها تجعلها اختيارات لأنه يسهل رصدها ودراستها مثل في سؤال كم عمره ، هناك بديل له وهو أن تضع الفئات العمرية المناسبة للدراسة بدل كتابة العمر من كل واحد .

وهكذا في كل ما قلته من حقول نصية تكتب فيها الشريحة المستهدفة من الاستبيان نصوصاً معينة ممكن حصر تلك الاحتمالات ووضعها ضمن اختيارات .

ولكن الذي جعلني أغضب (أصلاً ما أحد عرف أني غضبت ) أني وجدت الكثير وليس الأكثر من التصويت ضمن المواقع لا يوردون اختيارات ضرورية ومهمة بل يورد واضع التصويت الخيارات التي تخدم غرضه وتصوره هو ولا يبالي بالآخرين إن كان هناك آخرين في ذهنه يخالفونه في الأسباب والحقول الواجبة وضعها في الاستبيان .

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…