You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多个API端点的JSON数据合并存储到同一数据库

解决方案

方式选择说明

两种方案都可实现,对入门阶段更推荐先通过PHP合并两组数据再统一存入数据库,逻辑更简单,不需要额外处理多表关联查询的操作,学习成本更低。

具体实现步骤

1. 用PHP获取两个API的JSON数据

新手优先用file_get_contents实现,代码更简洁:

// 第一个API数据
$api1Url = "你的第一个API地址";
$api1Json = file_get_contents($api1Url);
$api1Data = json_decode($api1Json, true); // 转成PHP关联数组

// 第二个API数据
$api2Url = "你的第二个API地址";
$api2Json = file_get_contents($api2Url);
$api2Data = json_decode($api2Json, true);

如果API需要传请求头、特殊参数,改用curl实现即可。

2. 通过关联键item name合并两组数据

把第一组数据的item name作为数组索引,方便快速匹配:

// 重组第一组数据,key为item name
$formattedData = [];
foreach($api1Data as $item) {
    $itemName = $item['item name'];
    $formattedData[$itemName] = $item;
}

// 合并第二组的额外字段
foreach($api2Data as $item) {
    $itemName = $item['item name'];
    // 如果存在匹配的item,就把第二组的字段加进去
    if(isset($formattedData[$itemName])) {
        // 把第二组的所有字段合并进去,也可以手动指定要新增的字段
        $formattedData[$itemName] = array_merge($formattedData[$itemName], $item);
    }
}

// 合并后的数据去掉key、转为索引数组(非必需,按需选择)
$finalData = array_values($formattedData);

3. 把合并后的数据导入MySQL

首先先在MySQL建对应的数据表,举个建表参考:

CREATE TABLE `item_data` (
  `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `item name` varchar(255) NOT NULL UNIQUE,
  -- 下方补充两个API返回的所有对应字段,比如:
  `field1` varchar(255) DEFAULT NULL,
  `field2` int DEFAULT NULL,
  `extra_field1` varchar(255) DEFAULT NULL,
  `extra_field2` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

然后用PHP执行插入操作,用mysqli实现即可:

// 连接数据库
$conn = mysqli_connect("数据库地址", "用户名", "密码", "数据库名");
if (!$conn) {
    die("连接失败: " . mysqli_connect_error());
}

// 循环插入数据
foreach($finalData as $item) {
    // 转义特殊字符避免SQL报错
    $itemName = mysqli_real_escape_string($conn, $item['item name']);
    $field1 = mysqli_real_escape_string($conn, $item['field1']);
    $field2 = intval($item['field2']);
    $extraField1 = mysqli_real_escape_string($conn, $item['extra_field1']);
    $extraField2 = intval($item['extra_field2']);
    
    $sql = "INSERT INTO item_data (`item name`, field1, field2, extra_field1, extra_field2)
            VALUES ('$itemName', '$field1', $field2, '$extraField1', $extraField2)
            ON DUPLICATE KEY UPDATE 
            field1=VALUES(field1), field2=VALUES(field2), 
            extra_field1=VALUES(extra_field1), extra_field2=VALUES(extra_field2)";
    // ON DUPLICATE KEY 逻辑用于避免重复item name插入报错,已有数据会自动更新
    mysqli_query($conn, $sql);
}

mysqli_close($conn);

先存库再合并的方案(可选)

如果后续两个API的数据需要分别独立更新,也可以先存两个单独的表,再用SQL关联查询合并:

  1. 分别为两个API建表,都保留item name字段,设置为唯一键
  2. 分别导入两个API的数据到对应表
  3. 用JOIN查询得到合并后的数据:
SELECT a.*, b.extra_field1, b.extra_field2 
FROM api1_table a
LEFT JOIN api2_table b ON a.`item name` = b.`item name`

内容的提问来源于stack exchange,提问作者Mercator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:36:05