我正在开发一个考勤管理程序,用于维护学生的缺席记录。该软件的用户需要输入各种日期,每月更新一次:例如,将输入学生在该特定月份缺席的日期列表,然后我的程序必须将它们存储到数据库中date添加为相应表中的新行。
我在内部使用数组存储日期,如何将这些日期传输到数据库中?我该怎么办?
答案 0 :(得分:2)
您尚未提及正在使用的数据库系统,因此我的回复是一般性的。通常的方法是一个接一个地运行多个插入语句:
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
现在,您可以使用上述任何方法迭代数组并将单独的出勤行添加到数据库中。
答案 1 :(得分:2)
foreach($arrayName as $arrayValue) { // run your query here! }
例如:
$myArray = array('apple','orange','grape'); foreach($myArray as $arrayFruit) { $query = "INSERT INTO `Fruits` (`FruitName`) VALUES ('" . $arrayFruit . "')"; mysql_query($query, $connection); }
这有意义/适合你的想法吗?
答案 2 :(得分:1)
您是否要单独存储日期,以便您可以与它们一起玩,查询它们等等? 或者你只是想按原样存储数组?
如果你想分开存储日期,你可能想要为学生创建一个带有FK的表,一个日期列和一个日期性质的列,如缺席,迟到,......
然后你确实将单个日期存储到该表中。如果你必须通过迭代,但如果你可以使用Cerbrus的解决方案之一!建议不要在循环中使用db-queries。
如果您只需要将该数组存储在某处,可以将其序列化并将序列化字符串存储在text或varchar列中。
答案 3 :(得分:0)
遍历数组并为每个日期执行插入SQL。
答案 4 :(得分:0)
您使用的是哪种语言和什么类型的数据库?这是一个Web应用程序吗?桌面应用程序?没有更多信息,我们无法帮助您。
根据您的具体情况,上述任何解决方案都可行。或者您甚至可以将所有出勤记录一次性加载为CSV或XML文档。也许你的一些研究可以帮助你提出一个更有用的问题吗?