Index: modules/comment/comment.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/comment/comment.module,v
retrieving revision 1.509
diff -u -r1.509 comment.module
--- modules/comment/comment.module	8 Dec 2006 16:16:30 -0000	1.509
+++ modules/comment/comment.module	10 Dec 2006 22:29:08 -0000
@@ -1829,18 +1829,30 @@
  * - comment_count: the total number of approved/published comments on this node.
  */
 function _comment_update_node_statistics($nid) {
-  $count = db_result(db_query('SELECT COUNT(cid) FROM {comments} WHERE nid = %d AND status = %d', $nid, COMMENT_PUBLISHED));
+  $result = db_fetch_object(db_query('SELECT COUNT(c.cid) count, ncs.nid  FROM {comments} c LEFT JOIN {node_comment_statistics} ncs ON c.nid = ncs.nid  WHERE c.nid = %d AND c.status = %d GROUP BY ncs.nid', $nid, COMMENT_PUBLISHED));
 
   // comments exist
-  if ($count > 0) {
+  if ($result->count > 0) {
     $last_reply = db_fetch_object(db_query_range('SELECT cid, name, timestamp, uid FROM {comments} WHERE nid = %d AND status = %d ORDER BY cid DESC', $nid, COMMENT_PUBLISHED, 0, 1));
-    db_query("UPDATE {node_comment_statistics} SET comment_count = %d, last_comment_timestamp = %d, last_comment_name = '%s', last_comment_uid = %d WHERE nid = %d", $count, $last_reply->timestamp, $last_reply->uid ? '' : $last_reply->name, $last_reply->uid, $nid);
+    //From first query result node_comment_statistics has no record. Insert one.
+    if (!isset($result->nid)) {
+      db_query("INSERT INTO {node_comment_statistics} (nid, last_comment_timestamp, last_comment_name, last_comment_uid,  comment_count) values(%d, %d, '%s', %d, %d)", $nid, $last_reply->timestamp, $last_reply->uid ? '' : $last_reply->name, $last_reply->uid, $result->count); 
+    }
+    else {
+      db_query("UPDATE {node_comment_statistics} SET comment_count = %d, last_comment_timestamp = %d, last_comment_name = '%s', last_comment_uid = %d WHERE nid = %d", $result->count, $last_reply->timestamp, $last_reply->uid ? '' : $last_reply->name, $last_reply->uid, $nid);
+    }
   }
 
   // no comments
   else {
     $node = db_fetch_object(db_query("SELECT uid, created FROM {node} WHERE nid = %d", $nid));
-    db_query("UPDATE {node_comment_statistics} SET comment_count = 0, last_comment_timestamp = %d, last_comment_name = '', last_comment_uid = %d WHERE nid = %d", $node->created, $node->uid, $nid);
+    //From first query result node_comment_statistics has no record. Insert one.
+    if (!isset($result->nid)) {
+      db_query("INSERT INTO {node_comment_statistics} (nid, last_comment_timestamp, last_comment_name, last_comment_uid,  comment_count) values (%d, %d, '', %d, 0)", $nid, $node->created, $node->uid);  
+    }
+    else {
+      db_query("UPDATE {node_comment_statistics} SET comment_count = 0, last_comment_timestamp = %d, last_comment_name = '', last_comment_uid = %d WHERE nid = %d", $node->created, $node->uid, $nid);
+    }
   }
 }
 
