Go Back   vb.org Archive > Community Discussions > Modification Requests/Questions (Unpaid)
  #1  
Old 10-08-2003, 11:58 PM
dontpanic dontpanic is offline
 
Join Date: Jun 2003
Posts: 145
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Number of posts in last 30 days...

Hi all,

I've been trying to figure out how to get the query written so that I can show the total number of posts in the past 30 days.

This is what I have thus far, which I think should work if the date format was standard MySQL instead of the dateline format.

PHP Code:
// get posts over the past 30 days
$countrecentposts=$DB_site->query_first('SELECT COUNT(*) AS 30recent FROM post WHERE TO_DAYS(NOW()) - TO_DAYS(dateline) <= 30');
$total30recent=number_format($countrecentposts['30recent']); 
And then, I am using the $total30recent in my forums_home template where I want it to appear.

Any ideas on this one?? I know the problem is because the date is not stored in the normal date format...
Reply With Quote
  #2  
Old 10-09-2003, 09:09 AM
Logician's Avatar
Logician Logician is offline
 
Join Date: Nov 2001
Location: inside vb code
Posts: 4,449
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

PHP Code:
$agomktime (date("H"), date("i"), date("s"), date("m")-30date("d"), date("Y"));
$countrecentposts=$DB_site->query_first('SELECT COUNT(*) AS 30recent FROM post WHERE dateline >= $ago'); 
$total30recent=$countrecentposts['30recent']; 
If your DB size is large, this query can be a performance killer so if this is the case add an "index" to your dateline field in post table.
Reply With Quote
  #3  
Old 10-09-2003, 10:45 AM
dontpanic dontpanic is offline
 
Join Date: Jun 2003
Posts: 145
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks Logician,

Refresh my memory if you will...what benefit would adding the index give me? And would I need to change the code snip you provided if I did this?

Thanks!
Reply With Quote
  #4  
Old 10-09-2003, 11:46 AM
Logician's Avatar
Logician Logician is offline
 
Join Date: Nov 2001
Location: inside vb code
Posts: 4,449
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

dateline field in post table does not have an index by default so if your database is very large and you make queries using that field (like the code above), the query can take long to complete. (say a few seconds which is a long time for a query) If this query is used a lot of times (say used in forum home page), it will incresase your MYSQL work thus slow down the whole site.

To avoid this, you can add an "index" to dateline field of post table. An index in a field will boost queries that uses that field so after you have an index, your query will be completed in miliseconds regardless of your DB size.

You can not add an index in code end. You have to do it in MYSQL. For instance PHPmyadmin can do it for you but if you are not familiar with it, you'd better get someone who knows what he is doing (like your server admin) do it, because there are different types of indexes and believe me you would not want to add a wrong index
Reply With Quote
  #5  
Old 10-09-2003, 03:21 PM
dontpanic dontpanic is offline
 
Join Date: Jun 2003
Posts: 145
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

OK. I know how to add the index using PHPmyAdmin...but since you mentioned there were different types, what type would I want to use here to get the best results?

Thanks again!
Reply With Quote
  #6  
Old 10-09-2003, 11:26 PM
dontpanic dontpanic is offline
 
Join Date: Jun 2003
Posts: 145
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Logician, thank you very much for your help.

I did try the code you provided and received this error:

Quote:
Database error in vBulletin 2.3.0:

Invalid SQL: SELECT COUNT(*) AS 30recent FROM post WHERE dateline >= $ago
mysql error: Unknown column '$ago' in 'where clause'

mysql error number: 1054
Back to the drawing board I guess.
Reply With Quote
  #7  
Old 10-10-2003, 05:17 AM
Logician's Avatar
Logician Logician is offline
 
Join Date: Nov 2001
Location: inside vb code
Posts: 4,449
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Please change ' as " :

$countrecentposts=$DB_site->query_first("SELECT COUNT(*) AS 30recent FROM post WHERE dateline >= $ago");

As for index: If you click "INDEX" link for dateline column in Structure/Action Sections of phpmyadmin, you should be fine..
Reply With Quote
  #8  
Old 10-10-2003, 06:22 PM
dontpanic dontpanic is offline
 
Join Date: Jun 2003
Posts: 145
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Logician, thank you, it works great. I made one small change becuase the results I was getting with the previous code were "screwy" at best..they did not correlate well to the post count I did manually.

The final code below:

// get posts over the past 30 days
$ago= mktime (date("H")-720, date("i"), date("s"), date("m"), date("d"), date("Y"));
$countrecentposts=$DB_site->query_first("SELECT COUNT(*) AS 30recent FROM post WHERE dateline >= $ago");
$total30recent=$countrecentposts['30recent'];

Thanks again!
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 11:31 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.09397 seconds
  • Memory Usage 2,230KB
  • Queries Executed 13 (?)
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
  • (2)bbcode_php
  • (1)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (8)post_thanks_box
  • (8)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (8)post_thanks_postbit_info
  • (8)postbit
  • (8)postbit_onlinestatus
  • (8)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_postinfo_query
  • fetch_postinfo
  • 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
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete