0

我有两个数据库,一个很大(5 GB)和一个较小的数据库,它使用作为 cron 作业运行的 PHP 进行更新,以从大数据库中提取必要的数据。

到目前为止,如果该行不存在,我已经能够从大数据库中提取数据并将其插入到小数据库中。

这是数据库行的样子:

123456 TeamA-TeamB 1.14 4.30 7.60
(id, eventname, odds1, oddsX, odds2)

PHP 需要 a) 检查行是否存在,b1) 如果不存在则添加,b2) 如果存在则检查值odds1、oddsX 和odds2 是否不同,c) 如果存在,更新值。

这是执行 a) 和 b1) 的代码:

$SQL_INSERT="INSERT IGNORE INTO oddsnavi_baby.calc (id, eventname, odds1, oddsX, odds2) VALUES ('$eventid', '$eventname', '$odds1', '$oddsX', '$odds2')";
mysql_db_query($database_baby, $SQL_INSERT) or die("Failed Query of " . $SQL_INSERT);

如果odds1、oddsX 或odds2 的现有值与打算写入数据库的值不同,如何更改此部分以更新行?如果任何值不同,如果行更新也很好,因为前两个无论如何都不会改变。

4

2 回答 2

0
$SQL_INSERT="INSERT IGNORE INTO oddsnavi_baby.calc (id, eventname, odds1, oddsX, odds2) VALUES ('$eventid', '$eventname', '$odds1', '$oddsX', '$odds2')";
$SQL_UPDATE="update oddsnavi_baby.calc set odds1=\"$odds1\",oddsX=\"$oddsX\",odds2=\"$odds2\" where id=\"$eventid\");
$query="select * from oddsnavi_baby.calc where id=\"$eventid\"";
$process=mysql_query($query);
if(mysql_num_rows($process))       
        mysql_db_query($SQL_UPDATE);
else
        mysql_db_query($database_baby, $SQL_INSERT) or die("Failed Query of " . $SQL_INSERT);

在这种情况下,如果行数据没有变化,则存在冗余,那么更新也将是开销。检查值可以减少它

于 2012-04-07T11:03:57.680 回答
0

尝试:

REPLACE INTO 

而不是 INSERT IGNORE INTO。

此处的文档:http: //dev.mysql.com/doc/refman/5.0/en/replace.html

于 2012-11-13T21:36:50.957 回答