Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions

Reply
 
Thread Tools Display Modes
  #1  
Old 01-12-2005, 01:47 PM
zurih zurih is offline
 
Join Date: Nov 2004
Location: Israel
Posts: 130
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default time/date limit in query

i'm trying to display the last threads in forumhome.
does anyone knows how can I set time/date limit in the query so it will get the latest threads in X Days \ Hours. If i dont do that it will look in the entire table that will cause an overload in the server.

PHP Code:
$forumperms = array();
foreach(
$forumcache AS $forum) {
 
$forumperms["$forum[forumid]"] = fetch_permissions($forum['forumid']);
 
// ## HIDE FORUMS WITHOUT THE CANVIEW OR CANVIEWOTHERS PERMISSION ##
 
if (!($forumperms["$forum[forumid]"] & CANVIEW) || !($forumperms["$forum[forumid]"] & CANVIEWOTHERS)) {
  
$limitfids .= ','.$forum['forumid'];
 }
}
unset(
$forum);
if (
$vboptions['threadpreview'] > 0) {
 
$previewfield ', post.pagetext AS preview';
 
$previewjoin 'LEFT JOIN '.TABLE_PREFIX.'post AS post ON(post.postid = thread.firstpostid)';
}
$getthreads $DB_site->query("
 ## GET LATEST THREADS ##
 SELECT pagetext, thread.*,thread.iconid AS threadiconid 
$previewfield
 FROM "
.TABLE_PREFIX."thread AS thread
 LEFT JOIN "
.TABLE_PREFIX."deletionlog AS deletionlog ON(thread.threadid = deletionlog.primaryid AND type = 'thread')
 
$previewjoin
 WHERE open = '1'
 AND forumid NOT IN (0
$limitfids)
 AND thread.visible = '1'
 AND deletionlog.primaryid IS NULL
 ORDER BY lastpost DESC LIMIT 5"
);
 while(
$thread $DB_site->fetch_array($getthreads)) {
 
$threads true;
 
$thread['message'] = parse_bbcode2($thread['pagetext'], 0011);
 if (
strlen($thread['message']) > 500)
 {
 
$tobecontinued '... <a href="' $vboptions[bburl] . '/showthread.php?t=' $thread[threadid] . '">???? ?????</a>';
 
$thread['message'] = substr($thread['message'], 0500).$tobecontinued;}
 
$thread['title'] = fetch_censored_text(fetch_trimmed_title(unhtmlspecialchars($thread['title']), 68));
 
$thread['date'] = vbdate($vboptions['dateformat'], $thread['lastpost'], 1);
 
$thread['time'] = vbdate($vboptions['timeformat'], $thread['lastpost']);
 
$thread['replycount'] = vb_number_format($thread['replycount']);
 
// show goto new post
 
$show['firstnew'] = false;
 
$bbforumview fetch_bbarray_cookie('forum_view'$thread['forumid']);
 if (
$bbforumview $bbuserinfo['lastvisit']) {
  
$lastread $bbforumview;
 } else {
  
$lastread $bbuserinfo['lastvisit'];
 }
 if (
$thread['lastpost'] > $lastread) {
  
$threadview fetch_bbarray_cookie('thread_lastview'$thread['threadid']);
  if (
$thread['lastpost'] > $threadview) {
   
$show['firstnew'] = true;
   
$show['icon'] = false;
  }
 }
 
exec_switch_bg();
 eval(
"\$threadbits .= \"".fetch_template('forumhome_latestthreadbit')."\";");
}
if (
$threads) {
 
$show['latestthreads'] = true;
}
// memory saving
unset($thread$threads);
$DB_site->free_result($getthreads); 
thanks in advance
Reply With Quote
  #2  
Old 01-12-2005, 06:40 PM
rake's Avatar
rake rake is offline
 
Join Date: Nov 2002
Posts: 311
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

$cut = time() - 60*60*X*Y;
where X is the number of hours and Y is the number of days.. You're basically counting the number of seconds (60 seconds * 60 minutes * X hours * Y days) and subsctracting from the current time so you get a date in the past..

then you'd add a condition to your query: AND thread.dateline > $cut
Reply With Quote
  #3  
Old 01-12-2005, 07:29 PM
zurih zurih is offline
 
Join Date: Nov 2004
Location: Israel
Posts: 130
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

can u please write down where I have to add this?

PHP Code:
SELECT pagetextthread.*,thread.iconid AS threadiconid $previewfield
FROM 
".TABLE_PREFIX."thread AS thread
LEFT JOIN 
".TABLE_PREFIX."deletionlog AS deletionlog ON(thread.threadid deletionlog.primaryid AND type 'thread')
$previewjoin
WHERE open 
'1'
AND forumid NOT IN (0$limitfids)
AND 
thread.visible '1'
AND deletionlog.primaryid IS NULL
ORDER BY lastpost DESC LIMIT 5
"); 
Reply With Quote
  #4  
Old 01-12-2005, 07:52 PM
zurih zurih is offline
 
Join Date: Nov 2004
Location: Israel
Posts: 130
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

ok I figured it out...
but one thing though

$cut = 60*60*24*3;
does this mean it will show the last threads in the last 3 days OR in the last 3 days+24 hours+60 min+60 sec
because if i write 0*0*0*3 its not working.

and also, do u know how can I get the forum name which the thread exist?
what should I add..

thanks for your help!
Reply With Quote
  #5  
Old 01-12-2005, 11:23 PM
Link14716's Avatar
Link14716 Link14716 is offline
 
Join Date: Jun 2002
Location: Georgia, USA
Posts: 2,519
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by zurih
ok I figured it out...
but one thing though

$cut = 60*60*24*3;
does this mean it will show the last threads in the last 3 days OR in the last 3 days+24 hours+60 min+60 sec
because if i write 0*0*0*3 its not working.

and also, do u know how can I get the forum name which the thread exist?
what should I add..

thanks for your help!
* is multiplication. It needs to be in seconds, so 60 is a minute, 60*60 is an hour, etc.
Reply With Quote
  #6  
Old 01-13-2005, 06:20 AM
rake's Avatar
rake rake is offline
 
Join Date: Nov 2002
Posts: 311
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

to get the forum name you'll need to join the forum table USING(forumid) which is equal to ON(thread.forumid=forum.forumid)
Reply With Quote
  #7  
Old 01-13-2005, 07:26 AM
zurih zurih is offline
 
Join Date: Nov 2004
Location: Israel
Posts: 130
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Link14716 thanks for the explanation

rake,
I'm getting database error when adding those lines
I added
PHP Code:
LEFT JOIN ".TABLE_PREFIX."forum ON (thread.forumid forum.forumid
I've done it wrong?

here is the code, just tell where to add the thing u wrote

PHP Code:
SELECT pagetextthread.*,thread.iconid AS threadiconid $previewfield
FROM 
".TABLE_PREFIX."thread AS thread
LEFT JOIN 
".TABLE_PREFIX."deletionlog AS deletionlog ON(thread.threadid deletionlog.primaryid AND type 'thread')
$previewjoin
WHERE open 
'1'
AND thread.dateline $cut
AND forumid NOT IN (0$limitfids)
AND 
thread.visible '1'
AND deletionlog.primaryid IS NULL
ORDER BY lastpost
DESC LIMIT 5
"); 
plus, what should I add to display it in the template?

like this is the thread title:
PHP Code:
$thread['title'] = fetch_censored_text(fetch_trimmed_title(unhtmlspecialchars($thread['title']), 68)); 
thanks
Reply With Quote
  #8  
Old 01-23-2005, 03:25 PM
NiROE NiROE is offline
 
Join Date: Nov 2004
Location: UK
Posts: 11
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Zurih, did you manage to get his working.. If so, would you be kind enough to post what changes you made to the original mod?

Reply With Quote
  #9  
Old 01-28-2005, 02:45 AM
TECK's Avatar
TECK TECK is offline
 
Join Date: Nov 2001
Location: Canada
Posts: 4,182
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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.
Reply With Quote
  #10  
Old 01-28-2005, 08:43 AM
zurih zurih is offline
 
Join Date: Nov 2004
Location: Israel
Posts: 130
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks for the reply teck

I have couple of questions...

Right now, this is my LATEST THREADES code in index.php:

PHP Code:
// START HACK 'Latest Threads On Forum Home'
// #################### PROCESS LATEST THREADS #######################
// fetch the permissions for each forum
$forumperms = array();
foreach(
$forumcache AS $forum) {
$forumperms["$forum[forumid]"] = fetch_permissions($forum['forumid']);
// ## HIDE FORUMS WITHOUT THE CANVIEW OR CANVIEWOTHERS PERMISSION ##
if (!($forumperms["$forum[forumid]"] & CANVIEW) || !($forumperms["$forum[forumid]"] & CANVIEWOTHERS)) {
$limitfids .= ','.$forum['forumid'];
}
}
unset(
$forum);
if (
$vboptions['threadpreview'] > 0) {
$previewfield ', post.pagetext AS preview';
$previewjoin 'LEFT JOIN '.TABLE_PREFIX.'post AS post ON(post.postid = thread.firstpostid)';
}
$cut 60*60*24*1;
$cut time() - $cut;
$getthreads $DB_site->query("
## GET LATEST THREADS ##
SELECT pagetext, thread.*,thread.iconid AS threadiconid 
$previewfield
FROM "
.TABLE_PREFIX."thread AS thread
LEFT JOIN "
.TABLE_PREFIX."deletionlog AS deletionlog ON(thread.threadid = deletionlog.primaryid AND type = 'thread')
$previewjoin
WHERE open = '1'
AND thread.dateline > 
$cut
AND forumid NOT IN (0
$limitfids)
AND thread.visible = '1'
AND deletionlog.primaryid IS NULL
ORDER BY lastpost
DESC LIMIT 5"
);
 
while(
$thread $DB_site->fetch_array($getthreads)) {
$threads true;
$thread['message'] = parse_bbcode2($thread['pagetext'], 0011);
if (
strlen($thread['message']) > 500)
{
$tobecontinued '... <a href="' $vboptions[bburl] . '/showthread.php?t=' $thread[threadid] . '">???? ?????</a>';
$thread['message'] = substr($thread['message'], 0500).$tobecontinued;}
$thread['title'] = fetch_censored_text(fetch_trimmed_title(unhtmlspecialchars($thread['title']), 68));
$thread['date'] = vbdate($vboptions['dateformat'], $thread['lastpost'], 1);
$thread['time'] = vbdate($vboptions['timeformat'], $thread['lastpost']);
$thread['replycount'] = vb_number_format($thread['replycount']);
// show goto new post
$show['firstnew'] = false;
$bbforumview fetch_bbarray_cookie('forum_view'$thread['forumid']);
if (
$bbforumview $bbuserinfo['lastvisit']) {
$lastread $bbforumview;
} else {
$lastread $bbuserinfo['lastvisit'];
}
if (
$thread['lastpost'] > $lastread) {
$threadview fetch_bbarray_cookie('thread_lastview'$thread['threadid']);
if (
$thread['lastpost'] > $threadview) {
$show['firstnew'] = true;
$show['icon'] = false;
}
}
exec_switch_bg();
eval(
"\$threadbits .= \"".fetch_template('forumhome_latestthreadbit')."\";");
}
if (
$threads) {
$show['latestthreads'] = true;
}
// memory saving
unset($thread$threads);
$DB_site->free_result($getthreads);
// END HACK 'Latest Threads On Forum Home' 
Now as you can see there, I added there
PHP Code:
$cut 60*60*24*1;
$cut time() - $cut
This is not good?

what I have to replace with your code?

Thanks !
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 06:11 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.05349 seconds
  • Memory Usage 2,328KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)bbcode_code
  • (7)bbcode_php
  • (1)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (2)pagenav_pagelink
  • (10)post_thanks_box
  • (10)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (10)post_thanks_postbit_info
  • (10)postbit
  • (10)postbit_onlinestatus
  • (10)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete