【发布时间】:2012-10-28 02:37:37
【问题描述】:
我有一个排名表,其中包含所有玩家的排名。
id | rank | playername | is_available | ranking_name | ranking_id
-------------------------------------------------------------------
1 | 1 | testname1 | 1 | australia open | 1
2 | 2 | testname2 | 1 | australia open | 1
3 | 3 | testname3 | 0 | australia open | 1
4 | 4 | testname4 | 1 | australia open | 1
5 | 1 | testname5 | 1 | japan open | 2
这个表很大,每个ranking_id 可以有超过500 名玩家。 现在每个玩家都可以向比他高 x% 的高手挑战一场比赛。此 x 由超级管理员设置。如果 x = 10,则玩家“testname4”可以挑战(ranking_id 中的玩家数量 * 10/100)= 4*10/100=0.4 轮到 1。所以 testname4 可以挑战他上方的一位玩家。但是他上面的播放器“testname3”不可用。所以他应该得到下一个可用的球员。我想要这样的输出
//testname4 can challenge below players
id | rank | playername | status |
--------------------------------------
2 | 2 | testname2 | available |
3 | 3 | testname3 | not available |
我做了什么:
//testname4 wants to challenge. So i know his rank and other information
$selectSql = mysql_query("SELECT * from rankingTable where ranking_id = 1 AND rank < 4");
这也给了我“testname1”记录。我怎么能限制这个?最大的问题是我需要按升序显示排名。在这里使用订单并不容易。
【问题讨论】:
-
如果某人不可用,是否还需要另一个 where 子句 where "is_available = 1"?
-
如果我这样做了,我不会得到不可用的球员。我必须向他们展示为什么要给他一个额外的球员。他们可以是 3 名不可用的球员。所以应该给他第四名。
-
好吧,只是不是 100% 被问到什么,所以我想我会澄清
-
当然。如果我描述性不够,请告诉我。我会尝试再次解释。