我正在开发一个应用程序,网站管理员可以上传Excel工作表以将数据上传到数据库。 Offcourse我使用this优秀的库将文件上传到我的mysql数据库。
问题:一切正常,但现在的问题是,如果管理员上传了一个列表,我必须向管理员显示页面上传的数据并要求他确认上传者点击按钮。到确认点我将数据存储在DB的临时表中。管理员确认后,我将其移动到DB中的永久表并删除临时表中的条目。如果管理员编辑相同的话excel,即他添加了更多记录并再次上传,以前的记录得到重复,这不应该发生。
我想检查excel文件中的记录是否已经存在(基于与每条记录关联的唯一id
)。这不是主键,但不是。与DB和excel表中的每条记录相关联。
我正在寻找关于如何在删除临时表信息时检查记录是否已存在的建议。我可以在每次上传时将临时表数据(,如果没有删除)与文件数据进行比较吗?如何检查文件记录是否与数据库中的文件记录相似并仅上传新增记录?。
任何建议,都有助于采取正确的方式 感谢您的关注
答案 0 :(得分:1)
要识别新记录,请在临时表和永久表上使用左连接或右连接(您的首选项),以将新记录插入永久表中。您还可以使用此技术来确定是否需要从永久表中删除记录。
使用内部联接来执行更新当前数据库中的记录,如@Pynner在其早期评论中指出的那样。
有关如何使用左右联接等Is there any way to check whether or not the query inside a MySQL trigger returns an empty set?
的说明,请参阅此答案答案 1 :(得分:1)
您可以使用insert ignore,这将忽略重复记录,只要应用了适当的唯一索引。这将忽略已插入的条目并仅添加新条目。这就是你想要的东西
您需要做的就是代替 INSERT INTO tbl_name(col1,col2)VALUES(val1,val2); 做 INSERT IGNORE INTO tbl_name(col1,col2)VALUES(val1,val2); 这应该停止重复并仅插入新条目。请注意,这取决于适用的索引。