I posted on the d.o forum yesterday about putting
together a sql query for a block in which users are listed according to the
total pageviews their content had received. I got one or two suggestions but
nothing concrete so waded in to try and get it done myself. I've come up against
both sql problems and theming issues too.
The two relevant tables are node and node_counter,
so if we take some example data:
node
nid uid
1
1
2
2
3
1
4
1
5
2
node_counter
nid
totalcount
1
15
2
22
3
9
4
17
5
6
so I'm looking for a block that gives
me:
USER
PAGEVIEWS
John (uid 1)
41
Ned (uid 2)
28
so far, I have this:
<table><tr><td>Title</td><td>Pageviews</td></tr>
<?php
$uid
= $account->uid;
$query= "SELECT node.title, node.nid,
node_counter.totalcount FROM node INNER JOIN node_counter ON node.nid =
node_counter.nid WHERE uid = $uid ORDER BY totalcount DESC LIMIT 5";
$results
= db_query($query);
while($output = db_fetch_object($results)){
print
"<tr><td>";
print "<a
href=\"/node/$output->nid\">";
print $output->title;
print
"</a>";
print "</td><td>";
print
$output->totalcount;
print
"</td></tr>";
}
?>
</table>
which gives me the top 5 viewed pages for each user
on their main /user page. It's very handy and I think I'll use it. Can someone
give me a pointer to go the next step towards my initial aim, the total of a
user's pageviews and then a list of the top X users on a site based on
pageviews. I know I need to use SUM in the sql statement but I don't seem to be
able to get the syntax right.
My other question regards the theming of the
output. You can see from my code that I've manually built the links...is there
an easier way to do it. I've used "$output .= node_title_list($result);" before
but that was just for a list of node titles, not for a table with 2-3 cols in
it. Is there another theme function for what I'm trying to do?
thanks in advance for any hints you can
give.
Neil