php - 从静态文件 JSON 提要更新数据库

标签 php mysql json database

我有一个 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 两列复制的事件。

谢谢。

最佳答案

为两列创建唯一索引。

CREATE 
    UNIQUE INDEX event_action
    ON tablename (event_id, action_id)  

关于php - 从静态文件 JSON 提要更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29811710/

相关文章:

javascript - 带有 php 决策的排队脚本

PHP通知: Undefined offset: 1

sql - 如何使用 'safe window' 为基于时间的元素创建 MySQL 查询?

javascript - 语法错误 : JSON. 解析 : unexpected character at line 1 column 1 of the JSON data?

java - 如何根据唯一键验证各个值,使用Java进行Json响应验证测试

php - 图像源在 Laravel 中不可读

php - 上传 > 转换 > 用 Flash 显示

php - 如何使用PHP中的YouTube API在特定 channel 上载视频?

mysql - SQL Server : Inner/left join results in too many rows

json - 在 PostgreSQL 9.2 中的 json 字段上创建索引