【发布时间】:2009-04-09 05:31:37
【问题描述】:
我正在开发一个考勤管理程序,用于维护学生的缺勤记录。该软件的用户需要输入不同的日期,每月更新一次:例如,将输入学生在该特定月份缺勤的日期列表,然后我的程序必须将它们存储到数据库中,每个在相应表中作为新行添加的日期。
我在内部使用数组存储了日期,我如何将它们传输到数据库中?我应该如何进行?
【问题讨论】:
标签: sql database database-design
我正在开发一个考勤管理程序,用于维护学生的缺勤记录。该软件的用户需要输入不同的日期,每月更新一次:例如,将输入学生在该特定月份缺勤的日期列表,然后我的程序必须将它们存储到数据库中,每个在相应表中作为新行添加的日期。
我在内部使用数组存储了日期,我如何将它们传输到数据库中?我应该如何进行?
【问题讨论】:
标签: sql database database-design
你没有提到使用的数据库系统,所以我的回复是笼统的。执行此操作的通常方法是一个接一个地运行多个插入语句:
INSERT INTO Table1 (FirstColumn, SecondColumn)
VALUES ('a', 'b');
INSERT INTO Table1 (FirstColumn, SecondColumn)
VALUES ('c', 'd');
INSERT INTO Table1 (FirstColumn, SecondColumn)
VALUES ('e', 'f');
GO
做到这一点的诀窍是使用 UNION ALL 语句:
INSERT INTO Table1 (FirstColumn, SecondColumn)
SELECT 'a', 'b'
UNION ALL
SELECT 'c', 'd'
UNION ALL
SELECT 'e', 'f'
GO
2008 之前的 SQL Server 版本仅支持这些方法。但 SQL 2008 和 MySQL 3.22 及以上版本也支持 Row 构造方法:
INSERT INTO Table1 (FirstColumn, SecondColumn)
VALUES ('a', 'b'),
VALUES ('c', 'd'),
VALUES ('e', 'f')
GO
现在您可以使用上述任何一种方法来遍历您的数组并将各个考勤行添加到数据库中。
【讨论】:
例如:
$myArray = array('苹果','橙子','葡萄'); foreach($myArray as $arrayFruit) { $query = "INSERT INTO `Fruits` (`FruitName`) VALUES ('" . $arrayFruit . "')"; mysql_query($query, $connection); }这有意义/符合您的想法吗?
【讨论】:
您想单独存储日期,以便您可以处理它们、查询它们等吗? 还是您只想按原样存储数组?
如果您想单独存储日期,您可能需要创建一个表,其中包含学生的 FK、日期列和日期性质列,例如缺勤、迟到、...
那么您确实会将单个日期存储到该表中。如果你必须,通过迭代,但如果你可以使用 Cerbrus 的解决方案之一!不建议在循环中使用 db-queries。
如果您只需要将该数组存储在某处,则可以对其进行序列化并将序列化后的字符串存储在 text 或 varchar 列中。
【讨论】:
您使用什么语言和什么类型的数据库?这是一个网络应用程序吗?桌面应用程序?如果没有更多信息,我们无法为您提供帮助。
根据您的情况,上述任何解决方案都可以工作。或者,您甚至可以一次将所有考勤记录加载为 CSV 或 XML 文档。也许对您进行更多研究会帮助您提出更有用的问题?
【讨论】:
遍历数组并为每个日期执行插入 SQL。
【讨论】: