试图让INSERT只插入新数据

时间:2013-07-22 20:05:37

标签: php mysql sql database

我有来自可读性的RSS feed,我用它来记录我读过的文章。我正在抓取标题和URL并将它们插入数据库供我自己使用。

但是,我的INSERT似乎占用了整个Feed,并且每次尝试重新插入它都会导致重复错误(see here)。现在,我知道我可以使用INSERT IGNORE删除该错误,但还有另一种方法可以解决这个问题吗?

可能做这样的事情:

检查数据库是否有最后一个条目=>将最后一个条目与数组数据进行比较=>将不存在的内容插入到DB中。

2 个答案:

答案 0 :(得分:1)

INSERT IGNORE没有羞耻感。用它快乐! (说真的,你必须手动处理自己的数据完整性逻辑很烦人且容易出错)。

大多数SQL方言都有一些合并数据的概念,这恰好就是MySQL处理它的方式。这意味着INSERT IGNORE不仅是一种快速简便的数据处理方式,而且还具有良好实践的新颖性。

你的另一个问题是RSS对任何其他快捷方式都没有帮助。我真的很喜欢@ AaronMiller的建议,但是pubDate元素是可选的,这意味着除非你完全控制RSS(我猜你没有,基于你担心存储的事实)它),你将不能依赖它在那里。


就此而言,the only data which is guaranteed to be a part of an RSS item is the description。无法保证在将来的日期,Feed可能会更改并删除标题或链接元素。如果这不是保证,那么使用INSERT IGNORE并将其与某种哈希配对以引导它可能是一个好主意。

答案 1 :(得分:1)

你有正确的想法,当然;您可以从数据库中获取最新的日期时间,只插入比这更新的日期时间,或者(如果您想要真正完成)从数据库中获取所有内容,与Feed中的所有内容进行比较,并且只插入不包含的项目匹配数据库中已有的东西。但是如果你真的希望INSERT只插入新问题标题中隐含的新数据,那么INSERT IGNORE是可行的方法,无疑也是最简单的实现方式。除非你对数据库中的流量有所顾虑,否则我会坚持下去。