MySQL SELECT Not getting last row
#6

Having a variable to determinate the page can make it possible without too many checks.

PHP код:
// global:
new CachegPlayer_ClanMembers[MAX_PLAYERS], gPlayer_ClanMembers@Page[MAX_PLAYERS];
// OnPlayerConnect:
gPlayer_ClanMembers[playerid] = Cache0;
gPlayer_ClanMembers@Page[playerid] = 0;
// wherever you execute the query
new Query[50];
mysql_format(g_SQLQuerysizeof Query"SELECT Name,Rank FROM Users WHERE Clan = %d"GetPlayerClan(playeridg_SQL)); // better a variable that stores player's clan
mysql_tquery(g_SQLQuery"OnClanMembersLoad""i"playerid);
// the specified callback
forward OnClanMembersLoad(playerid);
public 
OnClanMembersLoad(playerid)
{
    new 
rows cache_get_row_count();
    if (!
rows) return ... // error that there are no members
    
else if (rows 15)
    {
        
gPlayer_ClanMembers[playerid] = cache_save();
        
rows 15;
        
gPlayer_ClanMembers@Page[playerid] = 1// viewing 1st page
        // load the first 15 results and store the rest in memory
    
}
    new 
name[25], rank[25], s[48], targetid;
    
members[0] = EOS// reset
    
for (new i!= rowsi++)
    {
        
cache_get_row(i0name);
        
cache_get_row(i1rank);
        
sscanf(name"r"targetid);
        
format(ssizeof s"%s\t%s\t%s\n"nameranktargetid != INVALID_PLAYER_ID ? ("{00FF2F}Online") : ("{FF0000}Offline"));
        
strcat(memberss);
    }
}
ShowPlayerDialog(playerid13DIALOG_STYLE_TABLIST"Clan Members"memberscache_is_valid(gPlayer_ClanMembers[playerid]) ? ("Next") : ("Close"), "Cancel");
// OnDialogResponse (dialogid 13):
if (!response)
{
    
cache_delete(gPlayer_ClanMembers[playerid]);
    
gPlayer_ClanMembers[playerid] = Cache0;
    
gPlayer_ClanMembers@Page[playerid] = 0;
}
else
{
    if (
cache_is_valid(gPlayer_ClanMembers[playerid]))
    {
        
cache_set_active(gPlayer_ClanMembers[playerid]);
        new 
rows cache_get_row_count(), results = ++gPlayer_ClanMembers@Page[playerid] * 15;
        if (
rows results// if there are more rows, set the max rows for the current page (goes like 15, 30, 45, 60 etc.)
        
{
            
rows results;
        }
        else 
gPlayer_ClanMembers@Page[playerid] = 0// otherwise this is the last page, reset so we can delete the cache afterwards
        
new name[25], rank[25], s[48], targetid;
        
members[0] = EOS// reset
        
for (new = (results 15); != rowsi++) // 1 page = 15 results | page * 15 is the max rows
        
{
            
cache_get_row(i0name);
            
cache_get_row(i1rank);
            
sscanf(name"r"targetid);
            
format(ssizeof s"%s\t%s\t%s\n"nameranktargetid != INVALID_PLAYER_ID ? ("{00FF2F}Online") : ("{FF0000}Offline"));
            
strcat(memberss);
        }
        
ShowPlayerDialog(playerid13DIALOG_STYLE_TABLIST"Clan Members"members, !gPlayer_ClanMembers@Page[playerid] ? ("Close") : ("Next"), "Cancel");
        if (!
gPlayer_ClanMembers@Page[playerid])
        {
            
cache_set_active(Cache0);
            
cache_delete(gPlayer_ClanMembers[playerid]);
            
gPlayer_ClanMembers[playerid] = Cache0;
        }
    }

Reply


Messages In This Thread
MySQL SELECT Not getting last row - by Shinja - 31.07.2016, 16:30
Re: MySQL SELECT Not getting last row - by Konstantinos - 31.07.2016, 17:17
Re: MySQL SELECT Not getting last row - by Shinja - 31.07.2016, 19:57
Re: MySQL SELECT Not getting last row - by Konstantinos - 31.07.2016, 20:12
Re: MySQL SELECT Not getting last row - by Shinja - 31.07.2016, 20:20
Re: MySQL SELECT Not getting last row - by Konstantinos - 31.07.2016, 20:51

Forum Jump:


Users browsing this thread: 1 Guest(s)