Php Mysql选择查询-无法限制记录

Php Mysql选择查询-无法限制记录,php,mysql,Php,Mysql,我有一个排名表,里面所有的球员都有自己的排名 id | rank | playername | is_available | ranking_name | ranking_id ------------------------------------------------------------------- 1 | 1 | testname1 | 1 | australia open | 1 2 | 2 | testname2 |

我有一个排名表,里面所有的球员都有自己的排名

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
这张桌子很大,每个排名可以有超过500名玩家。 现在每个玩家都可以向比他高x%的玩家挑战一场比赛。此x由superadmin设置。如果x=10,玩家testname4可以挑战排名中的玩家数量_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记录。我怎样才能限制这一点?最大的问题是我需要按升序显示排名。在此处使用order by并不容易。

尝试只添加限制1或限制0,1开头,在查询末尾添加多少记录。

首先通过执行选择来确定要质询的用户。。。其中,_available=1 ORDER BY rank DESC LIMIT?,然后使用MINrank查找排名最高的此类用户,然后使用该信息筛选表中排名介于自己和该用户之间的用户:

选择rankingTable* 从rankingTable, 选择MINa_rank作为下限,b_rank-1作为上限 从…起 选择a.rank作为a_-rank,b.rank作为b_-rank 从rankingTable作为一个连接rankingTable作为b使用ranking_id 其中排名_id=? b.playername=? a.rank查看它,包括确定要选择的用户数。

如果有人不可用,是否还需要另一个where子句where\u available=1?如果这样做,我将无法获得不可用的玩家。我必须让他们知道为什么他会得到一个额外的球员。他们可以是3个不可用的玩家。所以他应该得到比他高的第四名球员。好吧,只是不是100%的被要求,所以我认为我会克拉鲁菲苏尔。如果我描述得不够详细,请告诉我。我会再解释一遍。我不能设置限制,如果获取的播放器不可用怎么办?我必须让他看看下一个可以上场的球员。我真的很感谢你的努力。这适用于所有条件。唯一缺少的是最后的一个where子句,其中ranking_id=1。这很有效。非常感谢+1并勾选你的答案。