我有一个来自 Readability 的 RSS提要,我用它来记录我读过的文章。我正在获取标题和 URL 并将它们插入数据库以供我自己使用。
但是,我的 INSERT 似乎正在获取整个提要并尝试每次重新插入它,这会导致重复错误(请参见此处)。现在,我知道我可以通过使用来消除该错误,INSERT IGNORE
但是还有其他方法可以解决这个问题吗?
可能通过做这样的事情:
检查数据库的最后一个条目 => 将最后一个条目与数组数据进行比较 => 将不存在的内容插入数据库。
没有羞耻感INSERT IGNORE
。用它来快乐!(说真的,您必须自己手动处理的数据完整性逻辑很烦人,而且更容易出错)。
大多数 SQL 方言都有一些合并数据的概念,而这恰好是 MySQL 处理它的方式。这意味着不仅INSERT IGNORE
是一种快速简便的数据处理方式,而且还具有良好实践的新颖性。
您的另一个问题是 RSS 在任何其他快捷方式中都没有真正的帮助。我真的很喜欢@AaronMiller 的建议,但该pubDate
元素是可选的,这意味着除非你完全控制 RSS(我猜你没有,基于你担心存储它的事实),你赢了不能依赖它在那里。
就此而言,唯一能保证成为RSS
项目一部分的数据是描述。无法保证在未来某个日期,Feed 可能会更改并删除标题或链接元素。如果这不是保证,那么使用INSERT IGNORE
并将其与某种哈希配对以启动可能是个好主意。
你有正确的想法,当然;您可以从数据库中获取最新的日期时间,并且只插入比那个更新的项目,或者(如果您想真正完整)从数据库中获取所有内容,与提要中的所有内容进行比较,然后只插入不更新的项目匹配数据库中已有的内容。但是,如果您真的希望 INSERT 只插入新数据,正如您的问题标题中所暗示的那样,那么INSERT IGNORE
就是要走的路,而且无疑也是最简单的实现。除非您担心数据库上的流量,否则我会坚持下去。