【问题标题】:Updating Database From Static File JSON Feed从静态文件 JSON 源更新数据库
【发布时间】:2015-06-30 22:42:09
【问题描述】:

我有一个 PHP 脚本提取一个静态的 JSON 文件,每 10 秒更新一次。它包含有关发生的一些事件的详细信息,它只是添加到 JSON 文件的顶部。然后我将它们插入到 MySQL 数据库中。

因为每次拉取文件时我都必须拉取每个事件,所以我只会插入新事件。最简单的方法是在数据库中搜索事件(主键 相同),但我每天都在谈论大约 4000 个事件,我不希望那么多查询只是为了看看是否存在。

我知道INSERT IGNORE,但看起来它只使用PRIMARY_KEY 来执行此操作。

我可以做些什么(最好是轻松地)来防止两个键上的重复?

例子:

我有一张表events,其中包含以下列:

  • ID(无关紧要,真的)
  • event_id(我需要从源存储)
  • action_id(多个action_id属于一个event_id)
  • 时间戳
  • 随便...

我的数据是我的 JSON 在第一次拉取时出现,如下所示:

event_id|action_id|...
   1    |   1
   1    |   2
   1    |   3
   2    |   1
   2    |   2
   2    |   3

那么下一个pull是这样的:

event_id|action_id|...
   1    |   1
   1    |   2
   1    |   3
   1**  |   4**
   1**  |   5**
   2    |   1
   2    |   2
   2    |   3
   2**  |   4**

希望插入标有星号的行,而忽略其他行。请记住,primary_keyid 完全在此表中,我只是将其用于无处不在。

我可以使用什么命令来“插入”我提取的每个事件,但只添加那些不通过 event_idaction_id 两列重复的事件。

谢谢。

【问题讨论】:

    标签: php mysql json database


    【解决方案1】:

    为两列创建唯一索引。

    CREATE 
        UNIQUE INDEX event_action
        ON tablename (event_id, action_id)  
    

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多