• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
یک سوال در مورد کواری نویسی ؟
#1
سلام من یک جدول دارم به فیلدهای زیر :

نام : فرض کنید فقط یک نفر هست
تاریخ
زمان
نوع درس
نمره

حالا میخوام با PHP فرم رو طوری
که به ازای هر تاریخ خاص نمرات اون شخص لیست بشه و آخرش هم جمعش بدست بیاد
مثلن :

نام : ali
تاریخ :93
نوع درس : riazi
نمره :16

نام : ali
تاریخ :93
نوع درس : riazi (دقت شود که مثل قبلی ریاضی هست تو یک تاریخ)
نمره :15
جمع: 31
-------
نام : ali
تاریخ :94
نوع درس : riazi
نمره : 11

نام : ali
تاریخ :94
نوع درس : shimi
نمره : 13
جمع : 24
-------
.
.
  پاسخ
تشکر شده توسط :
#2
سلام،
چقدر با پی‌اچ‌پی و پایگاه داده آشنایی دارین ؟
باید یک عملیات SELECT انجام بدین، با شرط مثلا date = 93.
در مورد مجموع هم میتونین از sum استفاده کنین.
کد:
SELECT grade, sum(grade) WHERE date = 93
حالا اون date میتونه یک متغیر باشه و با توجه به شرایط عوض بشه.
غایب
  پاسخ
تشکر شده توسط : hamid_80386
#3
(۱۳۹۴ مرداد ۲۳, ۰۴:۵۹ ب.ظ)Alaa نوشته: سلام،
چقدر با پی‌اچ‌پی و پایگاه داده آشنایی دارین ؟
باید یک عملیات SELECT انجام بدین، با شرط مثلا date = 93.
در مورد مجموع هم میتونین از sum استفاده کنین.
کد:
SELECT grade, sum(grade) WHERE date = 93
حالا اون date میتونه یک متغیر باشه و با توجه به شرایط عوض بشه.

جناب اون صرفن یک مثال بود
منظورم اینه که بر اساس هر تاریخ به اون شکل نشون داده بشه :
ببینید من وقتی بر اساس فیلد تاریخ گروپ میکنم فقط ی سطر میشه
اما اگه به مثال دقت کنید نمیخوام سطر هام حذف بشن بر اساس هر تاریخ.
مثال زدم که مثلن سال 93 دو درس ریاضی داریم میخواهیم مجموعش حساب کنیم
از طرفی فیلدهای همه سطرها رو هم نشون بدیم در خروجی

سال 95 هم مثلن 10 تا امتحان دادیم همین کار براش بکنیم..
و...
همه ی اینها میواهیم در یک صفحه لیست بشه.
  پاسخ
تشکر شده توسط :
#4
کد:
CREATE TABLE `student` (
  `name` varchar(45) NOT NULL DEFAULT '',
  `course` varchar(45) NOT NULL DEFAULT '',
  `grade` float NOT NULL DEFAULT '0',
  `date` date NOT NULL DEFAULT '0000-00-00'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `student` (`name`,`course`,`grade`,`date`) VALUES
('ali','riazi',19.5,'2015-02-02'),
('ali','tarikh',16,'2015-03-02'),
('ali','riazi',17,'2015-06-14'),
('ali','riazi',14,'2014-09-20'),
('ali','honar',17,'2014-07-29'),
('ahmad','riazi',20,'2015-04-09'),
('ahmad','honar',18,'2015-04-26');

نمرات ali در سال 2015:
کد:
SELECT `name`, `course`, (SUM(`grade`)/COUNT(`course`)) AS `grade` FROM `student` WHERE `name` = 'ali' AND YEAR(`date`)='2015' GROUP BY `course`;
به یـزدان که گر ما خرد داشتیم
کجـا این سر انجـام بد داشتیم؟
  پاسخ
تشکر شده توسط : hamid_80386 aminuse
#5
بیشترش رو نوشتن براتون،
ولی شما فکر کنم باید از GROUP_CONCAT استفاده کنین.
یه جستجویی بکنین در موردش.
غایب
  پاسخ
تشکر شده توسط : aminuse shgninc
#6
(۱۳۹۴ مرداد ۲۴, ۱۲:۲۷ ق.ظ)sara147 نوشته: نمرات ali در سال 2015:
کد:
SELECT `name`, `course`, (SUM(`grade`)/COUNT(`course`)) AS `grade` FROM `student` WHERE `name` = 'ali' AND YEAR(`date`)='2015' GROUP BY `course`;

ممنون اما این اون خروجی که من میخوام نمیده-تست شده.
این گروه بندی باعث حذف رکوردهای تکراری میشه
و همه رکورد هارو یکی میکنه.
من نمیخوام اینکار کنه.
  پاسخ
تشکر شده توسط :
#7
شما یه چیزی مثل کارنامه منظورتونه؟
مثلا 4 سطر شامل نمرات سال 2015 باشه و آخرین سطر معدل/جمع نمرات رو حساب کنه؟
به یـزدان که گر ما خرد داشتیم
کجـا این سر انجـام بد داشتیم؟
  پاسخ
تشکر شده توسط :
#8
(۱۳۹۴ مرداد ۲۴, ۱۲:۲۷ ق.ظ)sara147 نوشته: نمرات ali در سال 2015:
کد:
SELECT `name`, `course`, (SUM(`grade`)/COUNT(`course`)) AS `grade` FROM `student` WHERE `name` = 'ali' AND YEAR(`date`)='2015' GROUP BY `course`;

ممنون اما این اون خروجی که من میخوام نمیده-تست شده.
این گروه بندی باعث حذف رکوردهای تکراری میشه
و همه رکورد هارو یکی میکنه.
من نمیخوام اینکار کنه.
  پاسخ
تشکر شده توسط :
#9
نمرات درس های ali در سال 2015 به همراه مجموع نمرات:
کد:
SELECT `name`,YEAR(`date`),`course`,`grade` FROM `student` WHERE `name` = 'ali' AND YEAR(`date`)='2015'
UNION
SELECT `name`,YEAR(`date`),'total' AS `course`,SUM(`grade`) AS `grade` FROM `student` WHERE `name` = 'ali' AND YEAR(`date`)='2015';

sqlfiddle
به یـزدان که گر ما خرد داشتیم
کجـا این سر انجـام بد داشتیم؟
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان