vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB3 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=15)
-   -   I know why, but can't figure out a workaround.. (https://vborg.vbsupport.ru/showthread.php?t=69147)

Davey 09-06-2004 04:40 PM

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.

rake 09-06-2004 08:50 PM

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.

Davey 09-07-2004 08:57 AM

OMG it worked! Thank you!

Davey 09-07-2004 11:42 AM

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.

rake 09-07-2004 11:47 AM

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

math. ;)

Davey 09-07-2004 12:33 PM

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.

CarCdr 09-07-2004 01:23 PM

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";
}


Davey 09-07-2004 01:47 PM

Wonderful. You guys are amazing. :D Thanks!


All times are GMT. The time now is 12:53 AM.

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.00996 seconds
  • Memory Usage 1,754KB
  • 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_code_printable
  • (4)bbcode_php_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