vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   Modification Requests/Questions (Unpaid) (https://vborg.vbsupport.ru/forumdisplay.php?f=112)
-   -   Number of posts in last 30 days... (https://vborg.vbsupport.ru/showthread.php?t=57730)

dontpanic 10-08-2003 11:58 PM

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...

Logician 10-09-2003 09:09 AM

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.

dontpanic 10-09-2003 10:45 AM

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!

Logician 10-09-2003 11:46 AM

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 ;)

dontpanic 10-09-2003 03:21 PM

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! :)

dontpanic 10-09-2003 11:26 PM

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. :)

Logician 10-10-2003 05:17 AM

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..

dontpanic 10-10-2003 06:22 PM

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!


All times are GMT. The time now is 03:48 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01066 seconds
  • Memory Usage 1,735KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (2)bbcode_php_printable
  • (1)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (8)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.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/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.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
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete