Hi zurih,
Please note that operators like "||" and "&" are grandpa segments of code... toss them really fast and replace them with the regular used ones.

About the time cut, this is really easy.
All you have to do in your query is set a timecut, in this way you don't do a full table scan... for example:
Code:
$threadbits = '';
$threadmaxtime = 2 // <-- no. of days here
$threadcut = time() - (86400 * $threadmaxtime);
if ($activethread) // <-- condition here
{
// twisted condition to show the max number of threads, after the tables were partially scanned
// just in case you have to many results...
$threadmaxnumber = iif ($threadmax != 0 , 'LIMIT ' . $threadmax , '');
// notice the partial table scan based on "lastpost" time limit,
// that will ease the server quite a lot...
$threads = $DB_site->query("
SELECT threadid, forumid, title, replycount, postusername, postuserid, lastpost, views
FROM thread
WHERE $iforumperms AND lastpost >= $threadcut AND visible = 1 AND open <> 10
ORDER BY lastpost DESC $threadmaxnumber
");
// it's time to roll out the results...
while ($thread = $DB_site->fetch_array($threads))
{
$thread['title'] = unhtmlspecialchars($thread['title']);
$thread['title'] = xhtml_clean($thread['title']);
if ($threadmaxchars != 0 and strlen( $thread['title']) > $threadmaxchars)
{
$thread['title'] = substr($thread['title'] , 0 , $threadmaxchars - 2) . '...';
}
$thread['time'] = vbdate($timeformat , $thread['lastpost']);
$thread['date'] = vbdate($dateformat , $thread['lastpost']);
eval('$threadbits .= "' . gettemplate('home_threadbit') . '";');
}
$DB_site->free_result($threads);
unset($thread);
}
This was simply a basic example, just to make you understand the coding process for a partial table scan.
With my example, it should take you only few minutes to adapt it to the VB3 code, as Stefan used to say in the good old days.
Cheers.