2010-07-24 67 views
0

我使用此代碼來計算行並嘗試執行IF num rows equals to ZERO do INSERT if not UPDATE,但它不起作用。如果mysql_num_rows等於零不起作用

當我使用==操作符時,什麼都不會發生。如果我使用>=運算符腳本插入值,但在每個刷新上運行插入查詢,並且值在MySQL表中複製。

下面是代碼:

$isexist = mysql_query("select count(*) from wcddl_filehosts where downloadid = '".$download[id]."'"); 

if (mysql_num_rows($isexist) == 0) { 
mysql_query("insert into wcddl_filehosts (downloadid, rs) values ('".$download[id]."','$totalRS')"); 
} else { 
mysql_query("update wcddl_filehosts set rs = '$totalRS' where downloadid = '".$download[id]."'"); 
} 

這有什麼錯呢?

+0

重新標記,因爲這已經無關的preg_match。 – cypher 2010-07-24 15:26:07

回答

8

Count將返回一個值,並且您不能計數,然後調用mysql_num_rows。它是另一個。

你可以做

$isExist = mysql_query("Select count(id) from ..."); 
$r = mysql_fetch_array($isExist); 
if($r['COUNT(id)'] > 0){ 
//item exists 
}else{ 
//item doesnt exist 
} 

如果或者你可以做查詢:

$isexist = mysql_query("select * from wcddl_filehosts where downloadid = '".$download[id]."'"); 
if(mysql_num_rows($isExists)>0){ 
//we have items 
}else{ 
//we dont have items 
} 
+0

非常感謝您的回答。但我想問哪個方法更快? – 2010-07-24 13:32:32

+1

這是一個MySQL返回計數本身與php執行計數的問題。我會想象MySQL會更好,然後PHP是這樣,但這只是一個預感,沒有什麼比這更少。 :-) 雖然如果你在談論數百萬條記錄,那麼MySQL會更快,我幾乎是積極的。 – Chris 2010-07-24 13:34:54

+0

使用MySQL進行計數的原因是更好的選擇,因爲在計算總數之前,MySQL不必構建和發送整個結果集(在數百萬條記錄的情況下是大量數據)。從MySQL使用SELECT時,一般的經驗法則是絕不會返回不需要的結果,因爲這浪費了I/O資源。 – AvatarKava 2010-07-24 15:32:05