Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 09-06-2004, 04:40 PM
Davey Davey is offline
 
Join Date: Nov 2002
Location: England
Posts: 383
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default I know why, but can't figure out a workaround..

I know why this query returns 'Array', but I can't figure out how to get around it.

PHP Code:
function getRank($rating)
{
    global 
$dbase;
    if (
$rating 0)
    {
        
$rating 0;
    }
    
$max_rank_query mysql_query("SELECT * FROM `chronos_ranks` ORDER BY `rating` DESC LIMIT 1",$dbase);
    
$max_rank mysql_fetch_array($max_rank_query);
    
$max_rank $max_rank['id'];
    
$rank_query mysql_query("SELECT * FROM `chronos_ranks` WHERE `rating`<='" $rating "' ORDER BY `rating` DESC",$dbase);
    
$rank mysql_fetch_array($rank_query);
    if (
$max_rank == $rank['id'])
    {
        
$max_rating_query mysql_query("SELECT * FROM `chronos_players` ORDER BY `rating` DESC LIMIT 1",$dbase);
        
$max_rating mysql_fetch_array($max_rating_query);
        
$max_rating $max_rating['rating'];
        if (
$max_rating $rating)
        {
            
$rank mysql_fetch_array($rank_query);
        }
    }
    return 
$rank;

I'm trying to return the rank which the rating fits into.
I tried:
PHP Code:
$getrank mysql_query("SELECT * FROM `chronos_ranks` WHERE `rating`<='" $getuser['rating'] . "'",$dbase);
$getrank mysql_fetch_array($getrank); 
Trouble was, it returned "New Recruit ( 0 )" when I wanted it to return "Sergeant Major ( 7 )". When I replaced <= with >=, it returned "Second Lieutenant ( 8 )", which was 1 rank above what I needed.
I looked at the code of Babstats, and eventually found the function which determines the rank from the rating (which I copied the syntax of, see above function getRank() ).
PHP Code:
function GetRank($rating) {
  global 
$players_table$ranks_table;
  if(
$rating 0$rating 0;
  
$max_rank_query   DBQuery("SELECT * FROM $ranks_table ORDER BY rating DESC LIMIT 1");
  
$max_rank         DBFetchArray($max_rank_query);
  
$max_rank         $max_rank["id"];
  
$rank_query       DBQuery("SELECT * FROM $ranks_table WHERE rating<='$rating' ORDER BY rating DESC");
  
$rank             DBFetchArray($rank_query);
  if(
$max_rank == $rank["id"]) {
    
$max_rating_query DBQuery("SELECT * FROM $players_table ORDER BY rating DESC LIMIT 1");
    
$max_rating       DBFetchArray($max_rating_query);
    
$max_rating       $max_rating["rating"];
    if(
$max_rating $rating) {
      
$rank DBFetchArray($rank_query);
    }
  }
  return 
$rank;
}
/*I don't believe I am breaking copyright laws, since I am
only posting a function not the whole file.*/ 
I would like to keep the function I copied, but is there any way to fix it, so that it returns the rank it's supposed to rather than 'Array' ?

Thanks for any help.
Reply With Quote
  #2  
Old 09-06-2004, 08:50 PM
rake's Avatar
rake rake is offline
 
Join Date: Nov 2002
Posts: 311
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

The array it returns is the database row for that rank. So....

return $rank['id'];

unless you want it to return something other than id, just replace $rank['id'] with whatever field you want.
Reply With Quote
  #3  
Old 09-07-2004, 08:57 AM
Davey Davey is offline
 
Join Date: Nov 2002
Location: England
Posts: 383
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

OMG it worked! Thank you!
Reply With Quote
  #4  
Old 09-07-2004, 11:42 AM
Davey Davey is offline
 
Join Date: Nov 2002
Location: England
Posts: 383
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Possible to get a format like this: 1 day, 7 hours, 35 minutes from a total of seconds?
i.e., how do I change 15427 seconds into 'x days, x hours, x minutes' ?
Thx in advance.
Reply With Quote
  #5  
Old 09-07-2004, 11:47 AM
rake's Avatar
rake rake is offline
 
Join Date: Nov 2002
Posts: 311
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

$minutes = floor($x / 60) ;
$hours = floor($x / (60 * 60));
$seconds = $x - (hours * 60 * 60);

math.
Reply With Quote
  #6  
Old 09-07-2004, 12:33 PM
Davey Davey is offline
 
Join Date: Nov 2002
Location: England
Posts: 383
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Ah, but I suck at math.
Thx very much.
edit.-
For some reason, this:
PHP Code:
$minutes floor($statistics['time'] / 60);
$hours floor($statistics['time'] / (60 60));
$days floor($statistics['time'] / (60 60 24));
$statistics['time'] = "" $days "d, " $hours "h, " $minutes "m."
Produces this:
Code:
0d, 3h, 210m.
Reply With Quote
  #7  
Old 09-07-2004, 01:23 PM
CarCdr CarCdr is offline
 
Join Date: Apr 2004
Posts: 242
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Yeah, you have to remove the largest period from the time as you move from, say, days down to seconds, otherwise, you end up counting things more than once.

Try this function. It is a little verbose, but the upside is that it is easier to understand/maintain. (I have not tested this code.)
Code:
function get_elapsed_time_string($interval_in_seconds) {

     $diff = intval($interval_in_seconds);

     $days = intval($diff / 86400);          // div by sec's in a day
     $diff -= $days * 86400;                 // then remove that amount

     $hours = intval($diff / 3600);          // div by sec's in an hour
     $diff -= $hours * 3600;                 // remove the amount

     $minutes = intval(($diff +15) / 60);    // roundup: 45secs = 1 min

     return "$days d, $hours h, $minutes m";
}
Reply With Quote
  #8  
Old 09-07-2004, 01:47 PM
Davey Davey is offline
 
Join Date: Nov 2002
Location: England
Posts: 383
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Wonderful. You guys are amazing. Thanks!
Reply With Quote
Reply


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 07:59 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.04226 seconds
  • Memory Usage 2,255KB
  • 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
  • (2)bbcode_code
  • (4)bbcode_php
  • (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_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