Como le harнan para almacenar un arreglo en MYSQL??? -
Miguel_Leopold - 16.08.2012
Mi pregunta duda o consulta es:
ustedes como le harнan para almacenar un arreglo de variables en un campo de un registro en mysql por medio de un script en pawn
por ejemplo:
new arreglo[5] = {9, 128, 15, 81, 512};
como almacenarнan ese arreglo en un solo campo de un registro
Respuesta: Como le harнan para almacenar un arreglo en MYSQL??? -
Parka - 16.08.2012
Quote:
Originally Posted by Miguel_Leopold
Mi pregunta duda o consulta es:
ustedes como le harнan para almacenar un arreglo de variables en un campo de un registro en mysql por medio de un script en pawn
por ejemplo:
new arreglo[5] = {9, 128, 15, 81, 512};
como almacenarнan ese arreglo en un solo campo de un registro
|
no entiendo muy bien tu pregunta pero que es lo que quieres en realidad hacer ??
Respuesta: Como le harнan para almacenar un arreglo en MYSQL??? -
Jovanny - 16.08.2012
Ps facilmente, juntas todos los valores en un string, algo asн
pawn Код:
new arreglo[5] ={9, 128, 15, 81, 512};
new tmp[32];
format(tmp, 32, "%d %d %d %d %d", arrreglo[0], arreglo[1], arreglo[2], arreglo[3], arreglo[4]]);
// Lo que guardaras es el tmp
y lo subes como string, a la hora de usarlo lo "desformateas" o lo "spliteas", puedes usar sscanf
pawn Код:
new arreglo[5];
if(sscanf(retdata, "ddddd", arreglo[0], arreglo[1], arreglo[2], arreglo[3], arreglo[4])) return print("No se pudo desformatear!");
// Ya tienes el arreglo exactamente igual!
Donde retdata es el dato que retornу la columna de donde lo guardaste como string
Respuesta: Como le harнan para almacenar un arreglo en MYSQL??? -
Miguel_Leopold - 16.08.2012
Muy buen mйtodo, gracias
Pero acabo de hacer algo diferente, cree dos funciones para codificar y decodificar un arreglo de forma binaria, y a decir verdad resulto mбs rбpido y utiliza menos memoria para cuando los nъmeros tienen mбs de 5 dнgitos ( >= 10000) y aparte no necesito usar sscanf.
pawn Код:
stock codificar(arreglo[], resultado[], length) //en length ponen el tamaсo del array que deseen codificar
{
new indexS = 0;
new num[4][2] = {
{127, 128},
{32512, 32768},
{8323072, 8388608},
{2130706432, -2147483648}
};
for(new i = 0; i < length; i++)
{
new errata = 0;
for(new j = 0; j < 4; j++)
{
resultado[indexS + j] = (arreglo[i] & num[j][0]) >>> (j * 8);
errata |= (arreglo[i] & num[j][1])?(1 << j):(0);
if(resultado[indexS + j] == 0) resultado[indexS + j] = 128;
}
if(errata == 0) errata = 128;
resultado[indexS + 4] = errata;
indexS += 5;
}
return 1;
}
stock decodificar(arreglo[], resultado[])
{
new indexR = 0;
new idx = 0;
for(new i = 0; arreglo[i] != 0; i++)
{
if(idx == 32)
{
if(arreglo[i] != 128)
{
if(arreglo[i] & 1) resultado[indexR] |= 128;
if(arreglo[i] & 2) resultado[indexR] |= 32768;
if(arreglo[i] & 4) resultado[indexR] |= 8388608;
if(arreglo[i] & 8) resultado[indexR] |= -2147483648;
}
idx = 0;
indexR++;
continue;
}
if(arreglo[i] != 128)
{
resultado[indexR] |= (arreglo[i] << idx);
}
idx += 8;
}
return 1;
}
Y considerando todas las posibilidades se puede decir que es mejor, ya que por ejemplo un arreglo de tamaсo 63 en el peor de los casos en todos los slots el numero serнa de -2147483648 (11 caracteres) e incluyendo el caracter separador se necesitarнa un string de tamaсo 756 y con las funciones de codificar y decodificar se reducirнa a un string de tamaсo 315 (se reduce mбs de la mitad).
En cuestiones de probabilidad en 10000^63 posibilidades, el mйtodo que jovanny posteo utiliza menos espacio que mi mйtodo. Y con mi mйtodo existen 4294957295^63 posibles casos en que mi mйtodo utiliza menos espacio.
En cuestiones de tiempo de procesamiento no estoy seguro, despuйs harй las pruebas para saber cual es el que corra mбs rбpido.
Sй que parece una tonterнa el estar calculando todo eso, pero a mi me parece algo increнble para admirar xd.
Respuesta: Como le harнan para almacenar un arreglo en MYSQL??? -
Jovanny - 18.08.2012
Dije que podнas usar sscanf, no obligatoriamente, aun no me manejo mucho con binario.. pero en eso ando, aprendiendo..