[support] couple of issues with an sql query and theming a db query
Neil: esl-lounge.com
neil at esl-lounge.com
Wed Sep 10 10:52:21 UTC 2008
OK, I kept working away and am now very close:
<table><tr><td>User</td><td>Pageviews</td></tr>
<?php
$query= "SELECT node.nid, node.uid, SUM( node_counter.totalcount ) AS TotalPageviews
FROM node
JOIN node_counter ON node.nid = node_counter.nid
GROUP BY node.uid
ORDER BY `TotalPageviews` DESC LIMIT 5";
$results = db_query($query);
while($output = db_fetch_object($results)){
print "<tr><td>";
print "<a href=\"/user/$output->uid\">";
print $output->uid;
print "</a>";
print "</td><td>";
print $output->TotalPageviews;
print "</td></tr>";
}
?>
</table>
This gives me the following:
User Pageviews
2 349
7 298
1 187
5 183
8 136
How do I get the user names to show instead of the uid's? Is that going to be another JOIN with user table or can I get them from the UID in a simpler way?
Neil
----- Original Message -----
From: Neil: esl-lounge.com
To: support at drupal.org
Sent: Wednesday, September 10, 2008 12:12 PM
Subject: [support] couple of issues with an sql query and theming a db query
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
------------------------------------------------------------------------------
--
[ Drupal support list | http://lists.drupal.org/ ]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.drupal.org/pipermail/support/attachments/20080910/5ac1be44/attachment-0001.htm
More information about the support
mailing list