Index: modules/forum/forum.module =================================================================== --- modules/forum/forum.module 1 Mar 2010 11:32:00 -0000 1.448.2.8 +++ modules/forum/forum.module 4 Nov 2010 09:06:47 -0000 @@ -495,11 +495,31 @@ function forum_get_forums($tid = 0) { $_forums = taxonomy_get_tree($vid, $tid); if (count($_forums)) { - - $counts = array(); - - $sql = "SELECT r.tid, COUNT(n.nid) AS topic_count, SUM(l.comment_count) AS comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {term_node} r ON n.vid = r.vid WHERE n.status = 1 GROUP BY r.tid"; - $sql = db_rewrite_sql($sql); + $counts = array(); + $sql = " + SELECT r.tid AS tid, n.nid AS nid, l.comment_count AS nid_comment_count + FROM {node} n + INNER JOIN {node_comment_statistics} l ON n.nid = l.nid + INNER JOIN {term_node} r ON n.vid = r.vid + WHERE n.status = 1 + GROUP BY r.tid, n.nid, l.comment_count"; + $sql_rewritten = db_rewrite_sql($sql); + if ($sql_rewritten == $sql) { + $sql = " + SELECT r.tid, COUNT(n.nid) AS topic_count, SUM(l.comment_count) AS comment_count + FROM {node} n + INNER JOIN {node_comment_statistics} l ON n.nid = l.nid + INNER JOIN {term_node} r ON n.vid = r.vid + WHERE n.status = 1 + GROUP BY r.tid"; + $sql = db_rewrite_sql($sql); + } + else { + $sql = " + SELECT tid, COUNT(nid) AS topic_count, SUM(nid_comment_count) AS comment_count + FROM ($sql_rewritten) AS forum_content_list + GROUP BY tid"; + } $_counts = db_query($sql); while ($count = db_fetch_object($_counts)) { $counts[$count->tid] = $count; @@ -546,7 +566,7 @@ function forum_get_forums($tid = 0) { * than NODE_NEW_LIMIT. */ function _forum_topics_unread($term, $uid) { - $sql = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} tn ON n.vid = tn.vid AND tn.tid = %d LEFT JOIN {history} h ON n.nid = h.nid AND h.uid = %d WHERE n.status = 1 AND n.created > %d AND h.nid IS NULL"; + $sql = "SELECT COUNT(DISTINCT n.nid) FROM {node} n INNER JOIN {term_node} tn ON n.vid = tn.vid AND tn.tid = %d LEFT JOIN {history} h ON n.nid = h.nid AND h.uid = %d WHERE n.status = 1 AND n.created > %d AND h.nid IS NULL"; $sql = db_rewrite_sql($sql); return db_result(db_query($sql, $term, $uid, NODE_NEW_LIMIT)); } @@ -575,7 +595,7 @@ function forum_get_topics($tid, $sortby, $sql .= tablesort_sql($forum_topic_list_header, 'n.sticky DESC,'); $sql .= ', n.created DESC'; // Always add a secondary sort order so that the news forum topics are on top. - $sql_count = db_rewrite_sql("SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} r ON n.vid = r.vid AND r.tid = %d WHERE n.status = 1"); + $sql_count = db_rewrite_sql("SELECT COUNT(DISTINCT n.nid) FROM {node} n INNER JOIN {term_node} r ON n.vid = r.vid AND r.tid = %d WHERE n.status = 1"); $result = pager_query($sql, $forum_per_page, 0, $sql_count, $tid); $topics = array();