2012-04-07 108 views
0

我有两个数据库,一个非常大(5 GB),另一个更小,使用作为cron作业运行的PHP进行更新,以从大数据库。在SQL数据库中插入/更新/删除条目的PHP代码

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

这是一个数据库行的样子:

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

的PHP需要一)检查该行是否存在,B1),添加它,如果它不存在,B2),如果它确实存在检查做的值odds1,oddsX和odds2不同,c)如果他们这样做,更新值。

这是做了的代码)和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比那些不同打算写入数据库?如果的任何值不同,那么如果该行将被更新也是好的,因为前两个不会改变。

+0

你为什么不使用select查询检查的目的,然后,如果其他人返回null插入查询,如果差价不为空选择查询然后更新查询 – 2012-04-07 10:57:26

+0

大数据库有15.000.000行。我认为每次通过33.000行较小的数据库运行查询会太慢,如果存在,我正在寻找更快的解决方案。 – 2012-04-07 11:30:18

回答

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); 

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

+0

我实际上希望避免在较小的数据库上运行查询。 $ SQL_INSERT中的“IGNORE”命令避免了运行查询来检查值是否已经存在的问题,并且我正在寻找类似的解决方案来解决这个问题。 – 2012-04-07 11:42:10

相关问题