我正在winform,mysql,c#做大学项目。
为此我创建了具有此结构的mysql表,..
CREATE TABLE `attendance_monthly_rpt` (
`id` int(15) NOT NULL AUTO_INCREMENT,
`student_no` varchar(50) NOT NULL,
`student_name` varchar(50) NOT NULL,
`day1` varchar(15) NOT NULL,
`day2` varchar(15) NOT NULL,
`day3` varchar(15) NOT NULL,
`day4` varchar(15) NOT NULL,
`day5` varchar(15) NOT NULL,
`day6` varchar(15) NOT NULL,
`day7` varchar(15) NOT NULL,
`day8` varchar(15) NOT NULL,
`day9` varchar(15) NOT NULL,
`day10` varchar(15) NOT NULL,
`day11` varchar(15) NOT NULL,
`day12` varchar(15) NOT NULL,
`day13` varchar(15) NOT NULL,
`day14` varchar(15) NOT NULL,
`day15` varchar(15) NOT NULL,
`day16` varchar(15) NOT NULL,
`day17` varchar(15) NOT NULL,
`day18` varchar(15) NOT NULL,
`day19` varchar(15) NOT NULL,
`day20` varchar(15) NOT NULL,
`day21` varchar(15) NOT NULL,
`day22` varchar(15) NOT NULL,
`day23` varchar(15) NOT NULL,
`day24` varchar(15) NOT NULL,
`day25` varchar(15) NOT NULL,
`day26` varchar(15) NOT NULL,
`day27` varchar(15) NOT NULL,
`day28` varchar(15) NOT NULL,
`day29` varchar(15) NOT NULL,
`day30` varchar(15) NOT NULL,
`day31` varchar(15) NOT NULL,
`tot_persent` int(15) NOT NULL,
`tot_absent` int(15) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
我用P,Ab,OD更新此表第day1到第31天的列。现在我想将tot_absent逻辑中的tot_persent更新为Ab与P和OD之和的总和。
例如......
IHM22557001,Jegadeeswaran,Ab,P,Ab,OD,0,0,OD,Ab,0,0,0,Ab
tot_persent是3 tot_absent是4 ..
提前感谢。
答案 0 :(得分:4)
我要建议一个不同的架构;天为主。如果你有基于日期的,即
Id, StudentNumber, Date, Status
请注意,预先计算的表格中的更新tot_persent等 不存在 ,因为它们在数据中很容易获得。
然后可以通过漂亮的方式获得数据:
SELECT Date, Status
FROM StudentAttendance
WHERE StudentNumber = @no
AND Date >= @start AND Date <= @end
ORDER BY Date
和聚合
SELECT Status, COUNT(1)
FROM StudentAttendance
WHERE StudentNumber = @no
AND Date >= @start AND Date <= @end
GROUP BY Status
此外,使用基于日期的记录还可以轻松地在应用层中执行聚合,而不是尝试在数据库中执行所有操作 - 如果您拥有当天的数据,则不会< em>需要数据库来进行聚合(LINQ-to-Objects会很好,因为你提到了C#)。
我个人我会使用基于整数的Status
,但这是主观的。但将其映射到C#枚举可以很好地工作,即
public enum AttendanceStatus : byte {
Present= 1,
Absent = 2,
...your other values etc...
}
可能是由tinyint
或类似的DB。大多数ORM /微观ORM会自动为您映射,因此您不必在那里做任何聪明的事情。