CREATE TEMPORARY TABLE node_count (uid int, nodes int); INSERT INTO node_count SELECT users.uid, count(*) as nodes FROM users LEFT JOIN users_roles ON ( users_roles.rid IN (3,4,5) AND users_roles.uid=users.uid ) INNER JOIN node_revisions ON (node_revisions.uid=users.uid) GROUP BY users.uid; CREATE TEMPORARY TABLE comment_count (uid int, comments int); INSERT INTO comment_count SELECT users.uid, count(*) as comments FROM users LEFT JOIN users_roles ON ( users_roles.rid IN (3,4,5) AND users_roles.uid=users.uid ) INNER JOIN comments ON (comments.uid=users.uid) GROUP BY users.uid; SELECT users.name, if(node_count.nodes is NULL,0,node_count.nodes) as nodes, if(comment_count.comments is NULL,0,comment_count.comments) as comments, (if(node_count.nodes is NULL,0,node_count.nodes) + if(comment_count.comments is NULL,0,comment_count.comments)) as combined FROM users LEFT JOIN node_count ON (users.uid=node_count.uid) LEFT JOIN comment_count ON (users.uid=comment_count.uid) WHERE (comments!=0 OR nodes!=0) ORDER BY combined DESC;