Jump to content

User Post = Rank


Nik Top

Recommended Posts

I am having trouble on user post = rank

 

This is the rank table:

-----------------

post  | rank

-----------------

0        | Noob

10      | Member

50      | Metal

100    | Silver

200    | Gold

 

 

$user_post="120";

 

$query_rank=mysql_query("SELECT * FROM rank WHERE post<='$user_post' OR post>='$user_post'") or die ("Error");

while ($row=mysql_fetch_assoc($query_rank)){

$rank=$row['rank'];

}

 

echo "User Rank: $rank";

 

The above code output:

User Rank: Gold

 

The right output should be:

User Rank: Silver

 

 

Please help

It will be better if someone willing to share a better ranking code.

Link to comment
https://forums.phpfreaks.com/topic/246161-user-post-rank/
Share on other sites

$user_post="120";

then you will get only one answer.

$user_post="100";
	$sql = "SELECT * FROM rank WHERE  post>='$user_post'";
	$res = mysql_query($sql);
	if(!$res){ 	die(" Could not query the database ORDERS - functions.php -32 : <br/>". mysql_error() ); }
	$num =  mysql_num_rows($res);

	while($row = mysql_fetch_assoc($res)){

	echo $row['rank']."<br/>";
	}

 

 

Link to comment
https://forums.phpfreaks.com/topic/246161-user-post-rank/#findComment-1264179
Share on other sites

it would be easier if you define start and end for each rank, so the database would look like this:

 

start  | end | rank

-----------------

0      |  9            | Noob

10    |  49          | Member

50    |  99          | Metal

100  |  199        | Silver

200    |  9999999 | Gold

 

then all you need is:

 

$user_post="120";
$query_rank = mysql_query("select `rank` from `rank` where `start` <= '$user_post' and `end` >= '$user_post' limit 1") or die ("Error");
$row=mysql_fetch_assoc($query_rank);
echo $row['rank'];

 

the only problem is you'll need to define an ending number for Gold users, but you can use an absurdly large number that no one will ever reach.

 

p.s. having a field named `rank` in a table also named `rank` can cause confusion. Since the table holds all ranks, why not call it `ranks` (plural) ?

Link to comment
https://forums.phpfreaks.com/topic/246161-user-post-rank/#findComment-1264310
Share on other sites

thank you for the reply

 

I dont know how to use the WebStyles method.

 

for the mysql table i try the order by in many different ways but seems not working at all.

 

I see that on this site there is a user post = rank system. thats what I wanted

 

I don't think just using mysql table will solve this.

 

Is there a different solution such as using a function or something else?

 

Link to comment
https://forums.phpfreaks.com/topic/246161-user-post-rank/#findComment-1264434
Share on other sites

<?php

function userRank($userRank) {
$rank = array(0=>'Noob',10=>'Member',50=>'Metal',100=>'Silver',200=>'Gold');
foreach($rank as $k => $v) {
   if($userRank > $k) {
     $ranking = $v;
   }
   else {
     break;
   }
}
return $ranking;
}

 

Although mysql will work.

Link to comment
https://forums.phpfreaks.com/topic/246161-user-post-rank/#findComment-1264438
Share on other sites

I set up a test database, with your values entered in, and ran it, coming up with the correct values.

 

db table

--
-- Table structure for table `rank`
--

CREATE TABLE IF NOT EXISTS `rank` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `post` int(11) NOT NULL,
  `rank` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

--
-- Dumping data for table `rank`
--

INSERT INTO `rank` (`id`, `post`, `rank`) VALUES
(1, 0, 'Noob'),
(2, 10, 'Member'),
(3, 50, 'Metal'),
(4, 100, 'Silver'),
(5, 200, 'Gold');

 

Query

SELECT rank FROM `rank` WHERE post <= 55 ORDER BY post DESC LIMIT 1

Link to comment
https://forums.phpfreaks.com/topic/246161-user-post-rank/#findComment-1264440
Share on other sites

Thank you Thank you

both of them work but function not working right

if i put 50 post for function = member, if i put 100 = metal, if i put 101=silver

Not a big issue i know where it came from so i can fix it.

 

anyway the mysql works great!!!

 

I found out why i making it wrong because I did not put the " DESC " in the query.

 

Here is my Table: ( I change table name to rank_sys because "WebStyles" advice

 

CREATE TABLE rank_sys (

id int NOT NULL auto_increment,

post varchar( 30 ) NOT NULL,

rank varchar( 50 ) NOT NULL,

PRIMARY KEY  (id)

);

 

INSERT INTO rank_sys  (post, rank) VALUES ('0','Noob');

INSERT INTO rank_sys  (post, rank) VALUES ('10','Member');

INSERT INTO rank_sys  (post, rank) VALUES ('50','Metal');

INSERT INTO rank_sys  (post, rank) VALUES ('100','Silver');

INSERT INTO rank_sys  (post, rank) VALUES ('200','Gold');

 

 

---------------------------------- rank.php

 

$user_post="120";

echo "User = $user_post Posts<br><br>";

 

// ---- function error not fix yet

function userRank($userRank) {

$rank=array(0=>'Noob',10=>'Member',50=>'Metal',100=>'Silver',200=>'Gold');

 

foreach($rank as $k=>$v) {

if ($userRank > $k) {

$ranking=$v;

}else {

break;

}

}

return $ranking;

}

 

// ------- function rank

echo "User Rank: ".userRank($user_post);

 

echo "<br><br>";

 

$query_rank=mysql_query("SELECT post,rank FROM rank_sys WHERE post<='$user_post' ORDER BY post DESC LIMIT 1") or die ("Error");

while ($row=mysql_fetch_array($query_rank)){

$rank=$row['rank'];

}

 

// -------- MySQL rank

echo "User Rank: $rank";

 

 

Great Great Thanks

 

Link to comment
https://forums.phpfreaks.com/topic/246161-user-post-rank/#findComment-1264459
Share on other sites

Oh wait there is new issue coming up.

 

i change my table post to

 

0=Noob

50=Member

150 = Metal

1200 = Silver

70000 = Gold

 

function is doing good because I add " = " into the code " if ($userRank >= $k) { "

 

mysql is being stupid if I put 1600 = Metal but 1260 = silver but still a big issue

 

now I want to focus on function but i tried and having difficulty puting mysql in it. please help

Link to comment
https://forums.phpfreaks.com/topic/246161-user-post-rank/#findComment-1264466
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.