About Mysql Update!

本文关键字:Update Mysql About | 更新日期: 2023-09-27 18:04:05

我在做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到day31列。现在我想将tot_absent逻辑中的tot_present更新为Ab和P和OD的和。

例如…

IHM22557001, Jegadeeswaran, Ab, p, Ab, OD, 0,0, OD, Ab, 0,0,0, Ab

tot_percent = 3Tot_absent = 4.

About Mysql Update!

我要建议一个不同的模式;day-based。如果你有基于天的,即

Id, StudentNumber, Date, Status

请注意,Update tot_percent等在预先计算的形式中不存在,因为它们在数据中是微不足道的。

然后数据可以通过相当干净的:

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

此外,使用基于天的记录也会使在应用程序层中做聚合变得微不足道,而不是试图在数据库中做所有事情-如果你有天的数据,你不需要 DB来做聚合(LINQ-to-Objects会很好,因为你提到了c#)。

个人我会使用基于整数的Status,但这是主观的。但是将它映射到c# enum将非常有效,即

public enum AttendanceStatus : byte {
    Present= 1,
    Absent = 2,
    ...your other values etc...
}

在DB中可能是tinyint或类似的。大多数ORM/micro-ORM会自动为你映射,所以你不需要做任何聪明的事情。