2010-07-24 8 views
0

J'utilise ce code pour compter les lignes et essayer de faire IF num rows equals to ZERO do INSERT if not UPDATE mais cela ne fonctionne pas. Quand j'utilise l'opérateur ==, rien ne se passe. Si j'utilise le script opérateur >= en insérant les valeurs mais en exécutant une requête d'insertion sur chaque actualisation et que les valeurs sont dupliquées dans la table MySQL.Si mysql_num_rows égal à ZERO ne fonctionne pas

Voici le code:

$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]."'"); 
} 

Quel est le problème avec ça?

+0

Retagged, car cela n'a rien à voir avec preg_match. – cypher

Répondre

8

Count va retourner une valeur, et vous ne pouvez pas compter, puis appeler mysql_num_rows. C'est l'un ou l'autre.

Vous pouvez faire

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

Si vous pouvez également faire la requête comme:

$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

merci beaucoup pour votre réponse. mais je veux demander de quelle manière plus rapide? –

+1

C'est une question de mysql retournant le compte lui-même contre php effectuant le compte. J'imagine que MySQL est mieux à compter alors php est cependant ce n'est qu'une intuition, rien de plus rien de moins. :-) Bien que si vous parlez de millions d'enregistrements alors MySQL sera plus rapide, je suis presque positif. – Chris

+0

La raison pour laquelle utiliser MySQL est un meilleur choix parce que MySQL ne doit pas générer et renvoyer l'ensemble des résultats (ce qui dans le cas de millions d'enregistrements est BEAUCOUP de données) avant de calculer un total. La règle générale lorsque vous utilisez SELECT de MySQL est de ne jamais retourner les résultats dont vous n'avez pas besoin, car c'est une perte de ressources d'E/S. – AvatarKava