SA-MP Forums Archive
Guardado de datos en MySQL. - 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: Guardado de datos en MySQL. (/showthread.php?tid=507612)



Guardado de datos en MySQL. - davazi7 - 18.04.2014

Hola! Estoy preparando mi gamemode para guardar todas las cuentas de usuario en bases de datos MySQL en vez de en los archivos .ini como hacнa hasta ahora.
La cuestiуn es que tengo este cуdigo en la funciуn de guardado de cuentas:
Код:
forward SaveAccount(playerid);public SaveAccount(playerid)
{
    new query[360];GetPlayerPos(playerid, PlayerInfo[playerid][pPosx], PlayerInfo[playerid][pPosy], PlayerInfo[playerid][pPosz]);
    new pName[24]; GetPlayerName(playerid, pName, 24); GetPlayerHealth(playerid, PlayerInfo[playerid][pVida]), GetPlayerArmour(playerid, PlayerInfo[playerid][pChaleco]);
    format(query, 360, "UPDATE `usuarios` SET `Vida`='%f', `Chaleco`='%f', `Admin`='%d', `Level`='%d', `Posx`='%f', `Posy`='%f', `Posz`='%f', `Password`='%s' WHERE `Nombre`='%s'", PlayerInfo[playerid][pVida], PlayerInfo[playerid][pChaleco],
    PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pPosx], PlayerInfo[playerid][pPosy], PlayerInfo[playerid][pPosz], PlayerInfo[playerid][pPassword], pName);
    mysql_function_query(Conecction, query, true, "OnQueryFinish", "ii", 0, playerid);
    return 1;
}
Pero querrнa aсadirle mбs celdas (mбs variables por usuario), para lo que tendrнa que escribir mбs entre las comillas "" del string, por lo que quedarнa bastante desorganizado, ademбs de que llegarнa al lнmite de 1024 caracteres. Alguien tiene idea de cуmo puedo hacer esto, pero con un cуdigo un poco diferente? Muchнsimas gracias!


Re: Guardado de datos en MySQL. - MrKaiser - 18.04.2014

Deberнas optimizar eso, guardando solo las variables necesarias y cuando correspondan. Por ejemplo la variable del nъmero de telйfono solo deberнa ser guardada una sola vez cuando compra el telйfono y cargada con todas las demбs cuando el jugador se loguea en el juego.
No sй cuбl es la necesidad de guardar muchas variables de una sola vez, sin embargo puedes ir guardando los datos en diferentes partes. Por ejemplo cuando el jugador se desconecta un public para guardar los datos de la posiciуn, otros de la vida y asн sucesivamente. En mi caso solo guardo unos pocos datos cuando el jugador se desconecta.


Respuesta: Guardado de datos en MySQL. - davazi7 - 18.04.2014

Hmm bien, es un buen consejo. He entendido algo asн como crear un public por cada variable a guardar (o conjunto de las mismas) y luego llamar a ese public dependiendo de la situaciуn, te referнas a eso?


Re: Guardado de datos en MySQL. - MrKaiser - 18.04.2014

Asн es, crear un public donde se guarde un conjunto de variables dependiendo de la situaciуn.
De todas formas cuando necesitas guardar solo una variable o ejecutar una consulta corta no es necesario procesarla en un public.


Respuesta: Guardado de datos en MySQL. - davazi7 - 18.04.2014

Sн, es de lуgica... Perfecto, pues creo que harй eso, muchas gracias!


Respuesta: Re: Guardado de datos en MySQL. - JustBored - 18.04.2014

Quote:
Originally Posted by MrKaiser
Посмотреть сообщение
Asн es, crear un public donde se guarde un conjunto de variables dependiendo de la situaciуn.
De todas formas cuando necesitas guardar solo una variable o ejecutar una consulta corta no es necesario procesarla en un public.
MySQL esta hecho para manejar grandes cantidades de datos, de hecho es mбs optimizado mandar un query muy largo que varios querys "chicos" al mismo tiempo; igualmente el plugin que usa (de seguro el de BlueG) funciona en un thread distinto y utiliza la funciуn ProcessTick para funcionar, osea que los querys se ejecutan en un hilo distinto lo cual NO interfiere con el funcionamiento del servidor en si, ademбs de que utiliza la funciуn ProcessTick para asegurarse que el servidor no estй realizando ninguna otra tarea.


Respuesta: Re: Guardado de datos en MySQL. - davazi7 - 18.04.2014

Quote:
Originally Posted by JustBored
Посмотреть сообщение
MySQL esta hecho para manejar grandes cantidades de datos, de hecho es mбs optimizado mandar un query muy largo que varios querys "chicos" al mismo tiempo; igualmente el plugin que usa (de seguro el de BlueG) funciona en un thread distinto y utiliza la funciуn ProcessTick para funcionar, osea que los querys se ejecutan en un hilo distinto lo cual NO interfiere con el funcionamiento del servidor en si, ademбs de que utiliza la funciуn ProcessTick para asegurarse que el servidor no estй realizando ninguna otra tarea.
Vale, entonces, siguiendo este criterio, cуmo lo harнas tъ?


Respuesta: Re: Guardado de datos en MySQL. - JustBored - 18.04.2014

Quote:
Originally Posted by davazi7
Посмотреть сообщение
Vale, entonces, siguiendo este criterio, cуmo lo harнas tъ?
Guardando todos los datos de una cuando se desconecta el jugador.


Respuesta: Guardado de datos en MySQL. - davazi7 - 18.04.2014

Eso lo he entendido, y es lo que pretendo hacer, pero no sй cуmo hacer una query tan larga sin pasarme del lнmite de string (1024 caracteres).
El cуdigo es el que tengo arriba, podrнas pasarme otra forma de hacerlo para poder hacer sentencias mбs largas?


Re: Guardado de datos en MySQL. - MrKaiser - 18.04.2014

Obvio que mandar una query larga es mejor que mandar varias querys chicas. Sin embargo no es necesario guardar todo de una vez. Por ejemplo datos de un objeto del jugador, colocado en una posiciуn personalizada, que ocupa varios datos como el modelo, bone, index, posx, posy, posz, rotx, roty, rotz, scalex... etc, guardarlo cada vez que un jugador se desconecta es totalmente innecesario.
En fin, es un tema muy variable que depende de cada script y programador. Mis consejos siguen siendo los mismos, guardar solo lo necesario cuando un jugador se desconecta y no todo.