1

我正在开发一个 Web 应用程序,它使用我拥有只读权限的远程数据库中的一些数据。该数据库 SATMANAGE 中的数据每 5 分钟更新一次。对于我的应用程序,我需要一个远程数据库表中的一些列,称为 IDIRECT_STATUS。

自动取款机。我有一个 cron 作业从 CLI 执行查询并将数据存储在 .txt 文件中。然后它截断本地表并使用 LOAD DATA LOCAL INFILE 重新填充更新的数据。

到目前为止,这一切都很好。随着应用程序变得越来越复杂,我需要一种更改本地“远程”表的方法。虽然我现在截断了本地“远程”表。我只需要使用远程“IDIRECT_STATUS”表中的更新数据来更新该表。这使我能够在本地“远程”表中拥有远程“IDIRECT_STATUS”表中不存在的列。

这就是我要找的。左侧是远程表。我想在相应的列上保留右侧的本地数据库,并使用左侧的远程数据库进行更新。这不会截断本地表,以便其他本地列保持状态。

IDIRECT_STATUS                  remotes
-------------------------------|-------------------------------
id                             | id
netmodem_name                  | netmodem_name
nms_name                       | nms_name
ip_addr                        | ip_addr
serial_no                      | serial_no
last_date_online               | last_date_online
last_updated                   | last_updated
network_name                   | network_name
network_id                     | network_id
is_mobile                      | is_mobile
latitude                       | latitude
longitude                      | longitude
lnb_name                       | lnb_name
buc_name                       | buc_name
upstream_qos_profile_name      | upstream_qos_profile_name
downstream_qos_profile_name    | downstream_qos_profile_name
inroute_maximum_data_rate      | inroute_maximum_data_rate
outroute_maximum_data_rate     | outroute_maximum_data_rate
upstream_cir                   | upstream_cir
use_upstream_cir               | use_upstream_cir
crtp_enabled                   | crtp_enabled
INROUTE_GROUP_ID               | INROUTE_GROUP_ID
                               | excluded           (Not updated or deleted)
                               | excluded_to        (Not updated or deleted)
                               | shipowner_id       (Not updated or deleted)
                               | etc...             (Not updated or deleted ...)

希望你们这些了不起的人能够帮助我。我有什么不清楚的请告诉我,我会尽快编辑问题!

4

1 回答 1

1

last_updated在左表中看到了一个字段。我的建议是使用一个简单的 perl 或 php 脚本来执行以下操作:

a) 检查本地表的最新更新时间 b) 从远程表中选择上次插入后已更新的数据 c) 用远程数据更新本地表

在 php 代码中,它看起来像这样:

<?
// select the last update time
$sql = "select max(last_updated) as last_update_time from remotes";
$r = mysql_query($sql);
$row = mysql_fetch_assoc($r);
// save the last upate time
$last_update_time = $row['last_update_time'];

// get newer rows from the remote database
$sql = "select * from IDIRECT_STATUS where last_updated > ".$last_update_time;
$r = mysql_query($sql);
while ($row = mysql_fetch_assoc($r)) {
  // generate update queries
  $sql = "update remotes set netmodem_name='".$row['netmodem_name']."', ... last_updated='".$row['last_updated']."' where id=".$row['id'];
  // execute query
  mysql_query($sql);
}
?>
于 2013-01-29T12:09:27.467 回答