Log in

View Full Version : Query to get number of post for a user today?


007
09-16-2005, 09:19 AM
I need help with a query please...

I haven't been able to get anything to work with the plug in system, but I have seen similar hacks that use a similar idea.

The query needs to pull the number of posts a user has so far today for display in the posbit. (Not the past 24 hours, just in the current day).

How can I do this? Thanks.

~007

Here's the code that worked on 3.0: (rolling 24 hours, however, but this doesn't work either on 3.5)

$cutoff=time()-86400;
$postcount=$DB_site->query_first("SELECT COUNT(*) AS total FROM post WHERE userid='$userid' AND dateline >= $cutoff");



I am trying to put it in postbit_start.

It comes up with "Call to a member function on a non-object" and I'm guessing it's because syntax has changed in 3.5... but I haven't the slightest clue where to begin. Any ideas?

White_Snake
09-16-2005, 05:27 PM
well, the syntaxis error i can see is that you're using $DB_site-> and as far as i know that's from vb 3.0.x

so the proper command should be

$vbulletin->db->query_frist, so, making the whole sentence be:


$cutoff=time()-86400;
$postcount=$vbulletin->db->query_first("SELECT COUNT(*) AS total FROM post WHERE userid='$userid' AND dateline >= $cutoff");

007
09-16-2005, 06:27 PM
Thanks, but I get the following with that:

Fatal error: Call to a member function on a non-object in ...../includes/class_postbit.php(251) : eval()'d code on line 2

:( What should I do?

Boofo
09-16-2005, 06:29 PM
Try:

$db->query_first

007
09-16-2005, 06:32 PM
Hey, I get the same error with that.. Hmmm..

White_Snake
09-16-2005, 06:35 PM
0k, now try this:


$cutoff=time()-86400;
$postcount=$vbulletin->db->query_first("SELECT COUNT(*) AS total FROM post WHERE userid='".vbulletin->userinfo[$userid]."' AND dateline >= $cutoff");


if that one doesnt do the trick, try this one:


$cutoff=time()-86400;
$postcount=$vbulletin->db->query_first("SELECT COUNT(*) AS total FROM post WHERE userid='".vbulletin->userinfo['$userid']."' AND dateline >= $cutoff");

007
09-16-2005, 06:37 PM
Getting closer..

I get this:

Parse error: parse error in ..../includes/class_postbit.php(251) : eval()'d code on line 2

White_Snake
09-16-2005, 06:42 PM
none of em worked, hmmmm =/ what else can be the error, well, i think this one of this 2 should work:


$cutoff=time()-86400;
$postcount=$vbulletin->db->query_first("SELECT COUNT(*) AS total FROM post WHERE userid='".vbulletin->userinfo[$userid]."' AND dateline >=".$cutoff."");

or

$cutoff=time()-86400;
$postcount=$vbulletin->db->query_first("SELECT COUNT(*) AS total FROM post WHERE userid='".vbulletin->userinfo['$userid']."' AND dateline >=".$cutoff."");

007
09-16-2005, 06:49 PM
Bad news... :(

No go. Thanks for helping though. The COUNT (*) isn't the problem is it?

White_Snake
09-16-2005, 06:54 PM
hmmm, well, try the query frist via phpmyadmin without variables or vbulletin commands, something like:

"SELECT COUNT(*) AS total FROM post WHERE userid='1' AND dateline >= 86400 ");


if it doesnt work, well, maybe you have an sql syntaxis error, that's the only way to know if you're right

007
09-16-2005, 06:57 PM
That's what I did to start with, and it worked fine. That's why I think it has something to do with how vb3.5 needs to have queries typed in differently somehow :(

White_Snake
09-16-2005, 07:08 PM
hmmm i see, well, the query works, but im not sure how to deal with queries that complex, what i have seen from your original was that you wasnt recalling the userid properly and you wasnt cutting the php time variable from the sql sentance

im not sure what else you can do :S

007
09-16-2005, 07:10 PM
Well thanks for trying. :) I appreciate it!

On that note, if anybody else has any ideas, I really would like to get this going if possible. Thanks a lot!

Marco van Herwaarden
09-16-2005, 07:37 PM
Put a global $vbulletin before the query.

007
09-16-2005, 07:40 PM
Hey MarchoH, thanks, but how would that look. Aren't the queries that WhiteSnake entered above already using the $vbulletin before them?

Nullifi3d
09-16-2005, 07:58 PM
White Snake, your codes have several errors. As Boofo said: the correct code would be $db->query_first, but it depends on the hook you're inserting this code into.

The following should work with most hooks:
$datecut = TIMENOW - 86400;
$postcount = $db->query_first("SELECT COUNT(*) AS total FROM " . TABLE_PREFIX . "post WHERE userid = '{$vbulletin->userinfo['userid']}' AND dateline >= '$datecut'");
Display the count in a template with $postcount[total]

007
09-16-2005, 08:08 PM
HotLinkHosting, now I am back to the Fatal Error from before:

Fatal error: Call to a member function on a non-object in ..../includes/class_postbit.php(251) : eval()'d code on line 2

The hook I am using is postbit_display_start.. I have tried it in other postbit hooks with the same problem however.. I think that is the right hook to use though. It makes sense at least according to where it is in the code..

White_Snake
09-16-2005, 08:16 PM
HotLinkHosting, now I am back to the Fatal Error from before:

Fatal error: Call to a member function on a non-object in ..../includes/class_postbit.php(251) : eval()'d code on line 2

The hook I am using is postbit_display_start.. I have tried it in other postbit hooks with the same problem however.. I think that is the right hook to use though. It makes sense at least according to where it is in the code..

so well, exaclty which error are you reciving using whit the code i gave you?

well try this now, inspired on Hotlink code:


$datecut = TIMENOW - 86400;
$postcount = $db->query_first("SELECT COUNT(*) AS total FROM " . TABLE_PREFIX . "post WHERE userid = '".$vbulletin->userinfo['userid']."' AND dateline >= ".$datecut."");

Boofo
09-16-2005, 08:20 PM
Shouldn't it be this:

global $vbulletin;
$datecut = TIMENOW - 86400;
$postcount = $db->query_first("SELECT COUNT(*) AS total FROM " . TABLE_PREFIX . "post WHERE userid = '".$vbulletin->userinfo['userid']."' AND dateline >= ".$datecut."");

White_Snake
09-16-2005, 08:22 PM
Shouldn't it be this:

global $vbulletin;
$datecut = TIMENOW - 86400;
$postcount = $db->query_first("SELECT COUNT(*) AS total FROM " . TABLE_PREFIX . "post WHERE userid = '".$vbulletin->userinfo['userid']."' AND dateline >= ".$datecut."");

hmmm i see, so, what's the function of global $vbulletin with the whole query?

007
09-16-2005, 08:45 PM
WhiteSnake and Boofo, both of yours both give me this error:

Fatal error: Call to a member function on a non-object in ..../includes/class_postbit.php(251) : eval()'d code on line 3

Marco van Herwaarden
09-16-2005, 08:54 PM
global $vbulletin;
$datecut = TIMENOW - 86400;
$postcount = $vbulletin->db->query_first("SELECT COUNT(*) AS total FROM " . TABLE_PREFIX . "post WHERE userid = ".$vbulletin->userinfo['userid']." AND dateline >= $datecut");

007
09-16-2005, 09:04 PM
Awesome MarchoH64! That worked! :) Thanks a lot.

White_Snake
09-16-2005, 09:09 PM
well, i learned something new today

Marco van Herwaarden
09-16-2005, 09:18 PM
Like i said on the previous page, just add the global $vbulletin.

Nullifi3d
09-16-2005, 09:38 PM
why does my code work in forumhome_start, but not elsewhere?

Too bad all hooks don't use the same code :(

007
09-16-2005, 09:56 PM
Yeah it's confusing. :(