用于在SQL数据库中插入/更新/删除条目的PHP代码

时间:2012-04-07 10:07:08

标签: php mysql insert sql-update insert-update

我有两个数据库,一个非常大(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的现有值与要写入数据库的值不同,如何更改此部分以更新行?如果任何值不同,那么行也会更新,因为前两个不会改变。

2 个答案:

答案 0 :(得分: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);

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

答案 1 :(得分:0)

尝试:

REPLACE INTO 

而不是INSERT IGNORE INTO。

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