2012-04-07 103 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

相關問題