2011-10-13 40 views
4

我從PHP這個查詢:試圖優化此MySQL查詢(選擇,在同一個查詢插入和更新)

mysql_query("INSERT INTO ".table_hack." (id,ip,count,lasttime) 
      VALUES (NULL,'".$ip."',1,NOW()) 
      ON DUPLICATE KEY UPDATE count=count+1, lasttime=NOW();"); 

正如你所看到的IM在table_hack插入新記錄只如果唯一元素不存在,在我的情況下是ip。如果元素存在,則查詢更新1中的countNOW()參數的值lasttime

我也想知道count在同一個查詢中的值,有可能嗎?我知道我可以做另一個查詢,但我希望只在一個(如果可能的話)。謝謝你的幫助!

+1

你想讓它成爲1查詢的任何特定原因? 您是否考慮過交易? –

+0

只是好奇心和優化。 – DomingoSL

+0

我能想到的唯一優化是檢查affected_rows。如果返回2,則知道計數已更新,以便您可以查詢計數。如果它返回1,它只插入記錄,所以你知道count = 1,不必做選擇查詢。 – Nin

回答

0

不,你不能。
另外,我沒有看到這樣的願望的理由。

對我來說,這是一個有趣的現象。這些問題在Stackoverflow上很常見,我很好奇爲什麼人們如此渴望將查詢合併到一個調用中。 更令人驚訝的是,每個人只用2個查詢限制自己,沒有人會問如何將腳本中的所有查詢合併到一個mysql調用中。

+0

這些人是否將蛋糕放入烤箱用糖霜 - 蛋糕出來結冰? –

-1

你不能用標準的php mysql函數來完成它。你可以用Mysqli驅動程序和方法multi_query()來做,但它會是2查詢什麼。

0

您不能組合INSERT和SELECT查詢,因此您必須運行兩個查詢。爲什麼使用兩個查詢會成爲問題?