0

我尝试通过发送 SQL 请求来获得有限的输出结果:

但它受玩家数量的限制,但我需要地图数量的限制。

我做不到,也无法在 StackOverflow 中找到示例

public static function GetWarcraftAccountsWithMapCodeLimited( $startid, $count )
{
    //XenForo DB
    $db = \XF::db();
    //Send request
    $waracc = $db->fetchAll("SELECT acct_username, acct_username_forum, acct_playingmap FROM wc_BNET WHERE acct_playingmap <> '' LIMIT ?, ?",[$startid, $count]);
    // return result
    return $waracc;
}

示例数据:

ID  acct_username   acct_username_forum acct_playingmap 
1   Nickname1       UserName1           TestMap1
2   Nickname2       UserName2           WelcomeMap2
3   Nickname3       UserName3           NewMap3
4   Nickname4       UserName4           TestMap1
5   Nickname5       UserName5           TestMap1
6   Nickname6       UserName6           AndMap4
7   Nickname7       UserName7           NewMap5
8   Nickname8       UserName8           NewMap66
9   Nickname9       UserName9           NewMap777
10  Nickname10      UserName10          NewMap88
11  Nickname11      UserName11          NewMap999
12  Nickname12      UserName12          NewMap10
13  Nickname13      UserName13          NewMap111

在我的 SQL 响应结果中,受行 ID 计数限制

但我需要受到 acct_playingmap 的限制

示例所需的结果受限于 2 个地图:

   acct_username   acct_username_forum acct_playingmap 
   Nickname1       Username1           TestMap1
   Nickname2       Username2           WelcomeMap2
   Nickname4       Username4           TestMap1
   Nickname5       Username5           TestMap1

如何受到唯一 acct_playingmap 计数的限制?

信息:

可以是 10000 名玩家,玩 1000 张地图,例如我需要结果有限的 10 张地图,所有玩家都玩这张地图!

(I need to get the result limited to unique number of acct_playingmap values.)

添加

需要首先需要独特的地图,然后通过这个值获得所有玩家?但是,如果地图大于 100,我不能这样做吗?(可以是非常非常大的请求大小)

4

2 回答 2

0

LIMIT 旨在从选择中检索指定数量的行,而不是过滤查询。

因此,如果您想通过 acct_playingmap 过滤(在您的示例中,您似乎正在尝试使用 Map1 或 Map2 获取记录),请将其放在您的 WHERE 子句中

... WHERE acct_playingmap like 'Map1' OR acct_playingmap like 'Map2'

或者,如果您只是想显示 acct_playingmap 的前 N ​​个值,则可以按 acct_playingmap 排序,然后将结果限制为前 N 个值:

... ORDER BY acct_playingmap DESC LIMIT 5

编辑: 尝试使用嵌套选择,这将为您提供前 5 个地图的所有信息:

... WHERE acct_playingmap IN 
         (SELECT distinct acct_playingmap FROM wc_BNET LIMIT 5 ORDER BY ID)
于 2017-11-24T08:26:46.337 回答
0
    SELECT acct_username, acct_username_forum, acct_playingmap FROM wc_BNET_TEST WHERE acct_playingmap IN 
    (
        SELECT * FROM 
        (
            SELECT DISTINCT acct_playingmap FROM wc_BNET_TEST WHERE acct_playingmap <> '' LIMIT 4 
        ) AS FUCC_MYSQL
    )  

这行得通!感谢D Ie的帮助。

于 2017-11-24T19:36:07.717 回答