选择具有双限制选项的行

时间:2016-05-31 21:22:22

标签: php mysql

我正在构建一个系统,该系统将显示一个MMO游戏中排名最高的300名玩家,这些游戏可以并且通常每天都会更改。所以这就是我想要做的事情:

选择前300名玩家,对于这300名玩家,我想从我选择的同一张桌子中选择30个最后的条目,这是当前的前300名。

这是我目前的查询,成功且准确地选择了前300名玩家。

SELECT * FROM `experiencehistory` WHERE `worldid` = `7` ORDER BY `experiencehistory`.`date` DESC, `experiencehistory`.`rank` ASC LIMIT 300

这是我的数据库结构:

ID - Identifies the entry for deletions etc later on.
Characterid - Which character does this entry belong to.
worldid - On which world does this character exist
rank - what is the current (at the time of the entry, which is daily) rank the player has
date - what date was the entry made on. (It saves a date through mktime() which is the day at 4am, all date entries for a specific date is the same.

现在,使用上面的查询我有如前所述的播放器,我怎样才能使这个查询也能获取最后30个条目?我,我并不认为它能够很好地工作,只是循环并为每个角色做另一个查询。这最终导致10-15秒的页面加载并使用大量资源,这显然不适用于实时环境。

我正在考虑使用Group by,但我不确定如何选择它们。感谢任何和所有的帮助。

1 个答案:

答案 0 :(得分:0)

从你的帖子中,我猜不出你将如何从每个玩家那里获取30个条目,但你可以这样做为每个玩家运行一些代码:

$query = "SELECT * FROM `experiencehistory` WHERE `worldid` = 7 ORDER BY `experiencehistory`.`date` DESC, `experiencehistory`.`rank` ASC LIMIT 300"

if ($link->multi_query($query)) {
    do {
        if ($result = $link->store_result()) {
            while ($row = $result->fetch_row()) {

            // do what you have to do to get the 30 entries here.

            }
            $result->free();
        }
    } while ($link->next_result());
}

$link是你的联系......

希望它有效!