On 7/24/07, <b class="gmail_sendername">Earl Miles</b> &lt;<a href="mailto:merlin@logrus.com">merlin@logrus.com</a>&gt; wrote:<div><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
This can be much more efficiently done in two queries where you do a limit 1<br>and do &gt; on one and &lt; on the other, using the sort criteria, to determine what<br>next/previous is.<br><br>For example, if you&#39;re sorting on created, you do a SELECT nid FROM node WHERE
<br>[sufficient clauses to restrict to just this forum] WHERE node.created &gt;=<br>$node-&gt;created AND node.nid &lt;&gt; $node-&gt;nid LIMIT 1<br><br>And reverse it to find the previous.<br></blockquote></div><br clear="all">
I did something similar for a client. They wanted to display the thumbnails of<br>the next/previous image below each image node.<br><br>What I did is go by the node ID.<br><br>So this function does what you mentioned above.
<br><br>function pn_node($node, $mode) {<br>&nbsp; switch($mode) {<br>&nbsp;&nbsp;&nbsp; case &#39;p&#39;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $op = &#39;&lt;&#39;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $order = &#39;DESC&#39;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br><br>&nbsp;&nbsp;&nbsp; case &#39;n&#39;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $op = &#39;&gt;&#39;;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $order = &#39;ASC&#39;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br><br>&nbsp;&nbsp;&nbsp; default:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return NULL;<br>&nbsp; }<br><br>&nbsp; $sql = &quot;SELECT n.nid FROM {node} n<br>&nbsp;&nbsp;&nbsp; WHERE n.nid $op %d<br>&nbsp;&nbsp;&nbsp; AND n.type in (&#39;image&#39;, &#39;video&#39;)
<br>&nbsp;&nbsp;&nbsp; AND n.status = 1<br>&nbsp;&nbsp;&nbsp; AND n.promote = 1<br>&nbsp;&nbsp;&nbsp; ORDER BY n.nid $order<br>&nbsp;&nbsp;&nbsp; LIMIT 1&quot;;<br><br>&nbsp; $n_nid = db_result(db_query($sql, $node-&gt;nid));<br>&nbsp; if ($n_nid) {<br>&nbsp;&nbsp;&nbsp; $n_node = node_load($n_nid);<br>&nbsp;&nbsp;&nbsp; if ($n_node-&gt;type == &#39;image&#39;) {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return l(image_display($n_node, &#39;thumbnail&#39;), &quot;node/$n_nid&quot;, array(), NULL, NULL, FALSE, TRUE);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; }<br>}<br><br>Then in the node-image.tpl.php file, I have this:<br><br>&lt;?php<br>

if ($page) {<br>
&nbsp; print pn_node($node, &#39;n&#39;);<br>
&nbsp; print pn_node($node, &#39;p&#39;);<br>
}<br>
?&gt;<br>
<br>It is not a bottleneck as far as queries go, but it does get executed a lot.<br><br>The issue with forums is that you have to join the term_node too and filter by<br>the forum, which will add to the query time.<br>-- 
<br><a href="http://2bits.com">2bits.com</a><br><a href="http://2bits.com">http://2bits.com</a><br>Drupal development, customization and consulting.