SA-MP Forums Archive
Una pregunta (SQLite) - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: Una pregunta (SQLite) (/showthread.php?tid=614510)



Una pregunta (SQLite) - lautaro97 - 09.08.2016

Buenas, mi duda es: їComo hago para continuar un dialogo en el cual ya tengo un Top que llega hasta 10?

Me explico, cuando utilize /top me salen los 10 jugadores con mas score; lo que necesitaria saber es como continuar ese dialogo.

Asi tengo hecha mi funcion para crear los tops

Код:
stock CrearTop(playerid, header[] = "SCORE", refer[] = "USERS")
{
 	new string[128], query[256], str[450];
	new string2[128];
	new DBResult:result;
	new DBResult:result2;
	new DBResult:result3;
	
	new ZQuery[2][256], String[3][256], DialString[450], DialStr[128];
	
	if(!strcmp(refer, "CLANS", false))
	{
	    format(ZQuery[0], 256, "SELECT `CLANNAME` FROM `CLANS` ORDER BY (`CLANKILLS` * 1) DESC limit %d", MAX_TOP_LIMIT);
	    result = db_query(Database, ZQuery[0]);
	    strcat(DialString, "{FFFFFF}Pos\t{FFFFFF}Nombre\t{FFFFFF}Kills\t{FFFFFF}Deaths\n");
	    for(new Qr; Qr < db_num_rows(result); Qr ++)
	    {
	        db_get_field(result, 0, String[0], 256);
	        format(ZQuery[1], 256, "SELECT `CLANKILLS` FROM `CLANS` WHERE `CLANNAME` = '%s'", String[0]);
	        result2 = db_query(Database, ZQuery[1]);
	        db_get_field(result2, 0, String[1], 256);
	        format(ZQuery[1], 256, "SELECT `CLANDEATHS` FROM `CLANS` WHERE `CLANNAME` = '%s'", String[0]);
	        result3 = db_query(Database, ZQuery[1]);
	        db_get_field(result3, 0, String[2], 256);
	        format(DialStr, sizeof DialStr, "{00FF00}%d\t{FFFFFF}%s\t%s\t%s",Qr + 1, String[0], FormatNumber(strval(String[1])), FormatNumber(strval(String[2])), GetTotalMembers(String[0]));
	        format(DialString,sizeof(DialString),"%s%s\n",DialString,DialStr);
	        db_next_row(result);
         	db_free_result(result2);
         	db_free_result(result3);
	    }
	    ShowPlayerDialog(playerid, DIALOGO_TOPS+1, DIALOG_STYLE_TABLIST_HEADERS, "{00FF00}Clanes", DialString, "Atras"," Cerrar");
	    db_free_result(result);
	}
	else if(!strcmp(refer, "USERS", false))
	{
		format(query,sizeof(query),"SELECT `NAME` FROM `%s` ORDER BY (`%s` * 1) DESC limit 10", refer, header);
		result = db_query(Database,query);
		strcat(str, "{FFFFFF}Pos\t{FFFFFF}Nombre\t{FFFFFF}Total\n");
		for(new a;a<db_num_rows(result);a++)
		{
			db_get_field(result,0,string,128);
			format(query,sizeof(query),"SELECT `%s` FROM `%s` WHERE `NAME` = '%s'", header, refer, string);
			result2 = db_query(Database,query);
			db_get_field(result2,0,string2,128);
			if(!strcmp(header, "DINERO", false)) format(string,sizeof(string),"{00FF00}%d\t{FFFFFF}%s\t$%s",a+1,string,string2);
			else if(!strcmp(header, "HORAS", false)) format(string,sizeof(string),"{00FF00}%d\t{FFFFFF}%s\t%s hs",a+1,string,string2);
			else if(!strcmp(header, "KDR", false)) format(string,sizeof(string),"{00FF00}%d\t{FFFFFF}%s\t%s",a+1,string,string2);
			else format(string,sizeof(string),"{00FF00}%d\t{FFFFFF}%s\t%s",a+1,string,string2);
			format(str,sizeof(str),"%s%s\n",str,string);
			db_next_row(result);
			db_free_result(result2);
		}
		ShowPlayerDialog(playerid,DIALOGO_TOPS+1, DIALOG_STYLE_TABLIST_HEADERS,"{00FF00}Top Players",str,"Atras"," Cerrar");
		db_free_result(result);
	}
	return 1;
}
Lo que quiero es que cuando apriete +10 (ejemplo de abajo) en el siguiente dialogo me salgan los otros 10 usuarios que siguen

Код:
ShowPlayerDialog(playerid,DIALOGO_TOPS+1, DIALOG_STYLE_TABLIST_HEADERS,"{00FF00}Top Players",str,"+10"," Cerrar");
Espero haberme explicado bien

Gracias de ante mano. Saludos


Re: Una pregunta (SQLite) - BrianFaria - 14.09.2016

Seguramente tendrias un define " MAX_TOP_LIMIT " cambialo a " 10 ".


Respuesta: Una pregunta (SQLite) - mcreed - 17.09.2016

Creo que te entiendo, tu quieres mostrar en otro dialogo los que continuan.
Bueno, para eso necesitas volver a realizar la consulta solo que en esta aсadiras la palabra OFFSET seguida de la posicion anterior desde la que recogera los registros, por ejemplo tu dices que quieres desde +10, entonces seria OFFSET 9

Ejemplo de Consulta:
PHP код:
SELECT Campo_NombreCampo_Puntaje FROM Tabla ORDER BY Campo_Puntaje DESC LIMIT 10 OFFSET 9
PD: Obviamente necesitas volver a crear todo el dialogo, solo que con una consulta como la que te mostre anteriormente.


Respuesta: Una pregunta (SQLite) - adri1 - 17.09.2016

Esto lo hice yo en mi servidor, como dicen ahi arriba es con OFFSET





Re: Una pregunta (SQLite) - BrianFaria - 18.09.2016

No se necesita necesariamente " OFFSET ", como le dije yo es suficiente, a no ser que borre el " %d", MAX_TOP_LIMIT " y le ponga 5 directamente.


Respuesta: Re: Una pregunta (SQLite) - adri1 - 18.09.2016

Quote:
Originally Posted by Speedpro
Посмотреть сообщение
No se necesita necesariamente " OFFSET ", como le dije yo es suficiente, a no ser que borre el " %d", MAX_TOP_LIMIT " y le ponga 5 directamente.
El quiere hacer paginas para ver todos los usuarios lo que tu le estas diciendo es para cambiar el limite solamente


Re: Una pregunta (SQLite) - BrianFaria - 20.09.2016

Ahh, no habia leido bien.


Respuesta: Una pregunta (SQLite) - lautaro97 - 01.12.2016

Yo se que el tema es bastante viejito, pero me sirviу mucho, gracias.

Ahora tengo otra duda, yo logre cargar 10 jugadores mбs, ahora me gustarнa saber si se puede hacer una especie de loop tal y como se muestra en la imagen de adri1, donde claramente no creo que hayas hecho mas de 1000 dialogos como yo lo estoy haciendo

Muchisimas gracias