[development] Forum module bug challenge

Khalid Baheyeldin kb at 2bits.com
Tue Jul 24 16:47:22 UTC 2007

On 7/24/07, Earl Miles <merlin at logrus.com> wrote:
> This can be much more efficiently done in two queries where you do a limit
> 1
> and do > on one and < on the other, using the sort criteria, to determine
> what
> next/previous is.
> For example, if you're sorting on created, you do a SELECT nid FROM node
> [sufficient clauses to restrict to just this forum] WHERE node.created >=
> $node->created AND node.nid <> $node->nid LIMIT 1
> And reverse it to find the previous.

I did something similar for a client. They wanted to display the thumbnails
the next/previous image below each image node.

What I did is go by the node ID.

So this function does what you mentioned above.

function pn_node($node, $mode) {
  switch($mode) {
    case 'p':
      $op = '<';
      $order = 'DESC';

    case 'n':
      $op = '>';
      $order = 'ASC';

      return NULL;

  $sql = "SELECT n.nid FROM {node} n
    WHERE n.nid $op %d
    AND n.type in ('image', 'video')
    AND n.status = 1
    AND n.promote = 1
    ORDER BY n.nid $order
    LIMIT 1";

  $n_nid = db_result(db_query($sql, $node->nid));
  if ($n_nid) {
    $n_node = node_load($n_nid);
    if ($n_node->type == 'image') {
        return l(image_display($n_node, 'thumbnail'), "node/$n_nid",
array(), NULL, NULL, FALSE, TRUE);

Then in the node-image.tpl.php file, I have this:

if ($page) {
  print pn_node($node, 'n');
  print pn_node($node, 'p');

It is not a bottleneck as far as queries go, but it does get executed a lot.

The issue with forums is that you have to join the term_node too and filter
the forum, which will add to the query time.
Drupal development, customization and consulting.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.drupal.org/pipermail/development/attachments/20070724/24173de5/attachment.htm 

More information about the development mailing list