我有一个MySQL表,其中每一行都是电视剧集。它看起来像这样:
showTitle | season | episode | episodeTitle | airdate | absoluteEpisode
----------------------------------------------------------------------------------------
The X-Files 5 12 Bad Blood 1998-02-22 109
The X-Files 5 13 Patient X 1998-03-01 110
(其中absoluteEpisode
是从第1集算起的剧集总数。)
它使用我编写的Ruby程序填充,该程序从Web服务获取数据。我想定期再次运行该程序来获取新剧集。那么问题就是,如何避免添加已存在的行的副本?此表中的所有列都不适合用作主键或唯一字段。
我有两个想法。第一个是创建一个新列md5
,其中包含所有这些值的MD5哈希值,并使其成为唯一列,以防止添加具有相同数据的两个行。这似乎会起作用,但要凌乱。
我的第二个是使用this solution from StackOverflow。但是,我无法让它发挥作用。我的SQL查询是
INSERT INTO `tv`.`episodes` (showTitle,episodeTitle,season,episode,date,absoluteEpisode)
SELECT '#{show}','#{title}','#{y['airdate']}' FROM `tv`.`episodes`
WHERE NOT EXISTS (SELECT * from `tv`.`episodes`
WHERE showTitle='#{show}' AND episodeTitle='#{title}' AND season='#{season_string}' AND episode='#{y['seasonnum']}' AND date='#{y['airdate']}' AND absoluteEpisode='#{y['epnum']}'")
#{...}
位是Ruby变量。这让我明显错误You have an error in your SQL syntax
。
翻阅我可以在主题上找到的书籍和文档,我仍然不确定如何正确执行此查询,或者它不是解决我的问题的聪明方法。我很感激任何建议!
答案 0 :(得分:0)
为什么不从showTitle
,季节和剧集创建一个主键,这将解决问题,因为我猜因为剧集编号在同一季节不能重复,这适用于同一台电视节目,
示例
x-files ==>第1季==>第1集这将是主键作为一个单元