Importante duda sobre Consulta SQL AVANZADA

Iniciado por Skeletron, 4 Agosto 2009, 09:03 AM

0 Miembros y 1 Visitante están viendo este tema.

Skeletron

WOW.. El nombre que le puse al psot debe haber dado miedo.. jajaja

Señores.. les voy a comentar algo...
Para poder entender lo que les diga, tienen que calibrar su cerebro a NO DISCUTIR EL "PORQUE" DE LA INCOHERENCIA QUE VOY A HACER...

Porque digo esto??.. Por ésto:
Una tabla de mi DATABASE de MYSQL tiene que guardar un dato algo "COMPLICADO".. Consiste en guardar un "nombre" (char) (hasta aca no hay ningun tipo de problema), y ese "nombre" es la identificacion de una secuencia de "CODIGOS"...
A ver...
Imaginen que tengo una tabla donde se guardará un CODIGO grandisimo y con él, un nombre... como un "ID"...

El problema es:
Como me conviene guardar ese codigo???
Seguramente dirán: "WOW... NO ENTIENDO PORQUE LA PREGUNTA TAN IDIOTA"... es porque, el problema viene ahora:
Ese CODIGO esta compuesto por 500 tramos..
Si.. imaginen que "noel" (el nombre) es la identificacion del codigo: 12345678 12345678 12345678 12345678 (y repetir 8 numeros 500 veces)
Sigue todo incoherente, pero aca les aclaro mas el problema ( ;-) )
La web, tiene en su momento, que analizar TODOS los codigos esos que hay guardados con diferentes nombres... en base a otro codigo de 500 pedasos, yo tengo que ver CUALES CODIGOS tienen el X% de pedasos iguales... o sea.. supongamos el 75%.. tengo que mostrar los "NOMBRES" identificadores, de los CODIGOS en la base de datos que coinciden en un 75% sus "PEDASOS" respecto a otro codigo ingresado por el usuario de 500 pedasos...



:)

ESTOY SEGURO QUE NO SABEN QUE RESPONDER.. PORQUE NO ENTIENDEN DONDE ESTA LA PREGUNTA...
La pregutna es:
La tabla: "QUILOMBO": ¿¿¿¿¿¿¿¿¿¿¿tendria que tener un campo: "NOMBRE", y 500 campos llamados: "Pedazo1", "Pedazo2".. Pedazo"500", para poder facilitar la "obtencion" (comparacion) de los PEDAZOS de CODIGO??????????????????


Y la gran pregunta luego, será: "¿Cual es la sentencia que tengo que escribir para chekear que coincidan esos porcentajes?

Nunca les pasó que estan seguros que jamas en la vida va a responder alguien este post???.. yo siento eso...

Hadess_inf


Skeletron

Jjajajajaj

Ese codigo, es como un "HASH", pero que debe ser comparado por fracciones... Y cada numero, cada valooorrr, de cadaaa fragmenntoooo.. es de mucha importancia.. por eso no puedo crear un HASH

[u]nsigned

Y para que es este 'HASH'?

Por que no usas MD5 o SHA1?.. y te evitas tanto lio..ademas para procesar una cantidad asi de informacion, comparando bloque por bloque con cada registro... :silbar:...espero que tu servidor tenga el ordenador de la NASA o sino.. :xD

Si decis para que quieres usar le HASH se te puede ayudar mejor, o dar un enfoque diferente y mas viable a tu problema  ;)

Saludos

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

isseu

Si usas un long text (LONGTEXT), y cada tramo esta separado de ; y luego los separas (con php o lo que uses)
es decir:
noel=12345678;12345678;12345678;12345678......
y luego en tu codigo php (por ejemplo)

$array = split(':', $tramosunidos);


Skeletron

#5
Cita de: isseu
Y para que es este 'HASH'?

Por que no usas MD5 o SHA1?.. y te evitas tanto lio..ademas para procesar una cantidad asi de informacion, comparando bloque por bloque con cada registro... :silbar:...espero que tu servidor tenga el ordenador de la NASA o sino.. :xD

Si decis para que quieres usar le HASH se te puede ayudar mejor, o dar un enfoque diferente y mas viable a tu problema  ;)

Saludos


Estoy dando un enfoque diferente...

Disminuiré MUCHO ese "500".. tal vez lo deje en menos de 250, y luego con otra tecnica capaz que a la mitad de 250...


Mira.. imagina que tengo un archivo .txt con gran cantidad de texto... de éste archivo, tomo cada X% una "muestra" de su texto de 8 letras (supongamos 8)... es como "tomar muestras" del interior del archivo... y guardo en MySQL el nombre del archivo (o si posicion en el disco duro) y luego a su derecha, escribo en diferentes campos, esos valores tomados por muestra...

Ahora supon que ya analicé tod mi Disco Duro y tengo en mi base de datos, todos los nombres de mis archivos con sus fragmentos de muestra..

En una aplicacion, creada por mi, le ingreso un archivo .txt de mucho tamaño tambien... la aplicacion hace EL MISMO SISTEMA DE MUESTREO a éste archivo.. cada exactamente el mismo PORCENTAJE con que hacía al DIsco Duro la muestra, tomará las muestras de éste ingresado....


Ahora tendras el CODIGO de éste archivo.. las x cantidad de muestras tomadas...
Y ahora tienes que COmparar los pedasos de muestra esos de tu archivo, con los pedasos de muestra que estan en la base de datos...
Aquellos archivos de la base de datos que coincidan en el 50% con el del archivo ingresado, se tienen que mostrar...

De paso agrego otra pregunta:
A esas 8 letras que tomaré como muestra muchas veces, las tengo que guardar en un sistema que me ocupe poco espacio.. el hexadecimal es el mejor?

Skeletron

Cita de: isseu en  4 Agosto 2009, 23:38 PM
Si usas un long text (LONGTEXT), y cada tramo esta separado de ; y luego los separas (con php o lo que uses)
es decir:
noel=12345678;12345678;12345678;12345678......
y luego en tu codigo php (por ejemplo)

$array = split(':', $tramosunidos);

Eso implicaría "traer" a php todas las lineas de la abse de datos, y analizarlas... no sería MUYYYYYYYYYYYYY DEMASIADOOO LENTO?!?!?!?!?!?!

No hay una manera, o una query con un poco de logica, que me devuelva ya los resultados.. o sea.. que el propio SQL mire cuales coinciden en un X porcentaje..??

[u]nsigned

Si el 'codigo' a guardar es igual o menor a 255 caracteres, podés usar la función levenshtein de PHP para obtener la diferencia entre ambas, ejemplo:

Código (php) [Seleccionar]
<?
$p1 = "5d4f5A";
$p2 = "5A4F6a";

echo levenshtein($p1, $p2);//4
?>


En este ejemplo obtenemos 4, esta funcion es sensible a mayúsculas y minúsculas(CASE SENSITIVE). Función devuelve la cantidad de caracteres que hay que que sustituir, insertar o borrar para que $p1 se convierta en $p2, a esto se le llama distancia Levenshtein. Dicho de otra forma, esta cadena compara caracter por caracter, y si son diferentes aumentan la cuenta en 1 del resultado de dicha función.

Saludos

P.D.:Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

[u]nsigned

#8
Cita de: Skeletron en  4 Agosto 2009, 23:45 PM
ay una manera, o una query con un poco de logica, que me devuelva ya los resultados.. o sea.. que el propio SQL mire cuales coinciden en un X porcentaje..??

No. A lo sumo con regexp podes obtener cadenas similares, pero no calcular la diferencia como con levenshtein de PHP. Y si ves que la cantidad de registros a analizares MUY extensa, podes ir haciendolo de a tramos con AJAX. Pero de cuantos estamos hablando?

Y por otro lado no veo la útilidad o proposito de esto.. :silbar: :)

Saludos

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

Skeletron

[quote author=nsigned link=topic=263268.msg1283332#msg1283332 date=1249423134]
Y por otro lado no veo la útilidad o proposito de esto.. :silbar: :)
[/quote]

Me parece que lo dejé claro en el inicio:
CitarSeñores.. les voy a comentar algo...
Para poder entender lo que les diga, tienen que calibrar su cerebro a NO DISCUTIR EL "PORQUE" DE LA INCOHERENCIA QUE VOY A HACER...

Y la tecnica de arriba no es lo que busco.. porque esas 8 letras tienen que ser EXACTAMENTE IGUALES para poder sumar 1 punto mas de "fragmentos" iguales..