elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Importante duda sobre Consulta SQL AVANZADA
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: Importante duda sobre Consulta SQL AVANZADA  (Leído 19,152 veces)
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Importante duda sobre Consulta SQL AVANZADA
« Respuesta #20 en: 5 Agosto 2009, 04:41 am »

Noo..
A esta web, es probable que la haga en mi PC.. en un server mio... U.U


En línea

SnakeDrak

Desconectado Desconectado

Mensajes: 243


[GPG: 0x9680A09E]


Ver Perfil
Re: Importante duda sobre Consulta SQL AVANZADA
« Respuesta #21 en: 5 Agosto 2009, 05:13 am »

Hola,

Ps.. no le veo sentido a lo que quieres hacer, yo tengo un hash que no se puede descifrar (no por ahora) y no tiene más de 10 lineas (claro que tiene muchas funciones) y tampoco devuelve una cadena muy grande, pero es suficiente, bueno aún así puedes hacer lo que dices sin necesidad de almacenar todo en una variable PHP, pongamos que cada parte del HASH tiene 5 números, almacenaremos todos en un LONGTEXT y lo separaremos con ; (solo para que sea entendible), entonces tenemos:

campo hash (LONGTEXT): 32456;54567;23450;12346;

Ese sería un ejemplo donde cada parte tiene 5 números y hay un total de 4, si queremos seleccionar solo el hash 3 pues sería: 3*(5+1)

Código
  1. SELECT SUBSTRING( `hash` , (3-1)*(5+1)+1, 5 ) FROM `tabla`
  2.  

Lo pongo con +1 para que sepas donde tienes que cambiar el 5 y el 3, eso seleccionaría todos los terceros hash.

Si aún no lo entiendes dime e intentaré explicarlo mejor.

Aquí tienes funciones de SQL: http://mysql.conclase.net/curso/index.php?fun=SUBSTRING
Saludos!


« Última modificación: 5 Agosto 2009, 05:17 am por SnakeDrak » En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Importante duda sobre Consulta SQL AVANZADA
« Respuesta #22 en: 5 Agosto 2009, 15:36 pm »

Pero, para que me hablas de HASH?!?!!? y de Encriptacion???
Yo no tengo que cifrar ningun dato..
Estoy tomando muestras de un archivo y luego comprarlas con otras muestras... no puede haber hashes.. y si los hubiese, sería totalmente en bano...




AGREGO:
Todos me han dicho que es incoherente... Bien... pero IBM le dijo a Bill Gates que las computadoras personales tambien serían totalmente en bano, e incoherentes y nadie las compraria.. y lo mismo pasó con Twitter.. quien iba a querer decir a cada rato que esta haciendo?? o quien iba a querer madnar texto por celular si podia llamar...

En fin amigo.. Cuando algo es INNOVADOR, no quiere decir que sea INCOHERENTE o malo..
Porque supongo que estamos todos TOTALMENTE seguros que yo no di a entender aun el verdadero funcionamiento de la futura web... :) Si realmente quisiera ver si un archivo es igual a otro, simplemente le hago un HASH a todo su contenido y lo comparo con el HASH del que entra...

Porque nadie puede cerrar su ecrebro auna idea que consiste en TOAMR MUESTRAS Y COMPARARLAS... la pregunta era: ¿Puede MySQL hacer la comparacion si coinciden porcentajes? NO fue la respuesta... OK.. entonces tengo que tomar cada linea y analizarla.. FIN del tema..
« Última modificación: 5 Agosto 2009, 15:40 pm por Skeletron » En línea

SnakeDrak

Desconectado Desconectado

Mensajes: 243


[GPG: 0x9680A09E]


Ver Perfil
Re: Importante duda sobre Consulta SQL AVANZADA
« Respuesta #23 en: 5 Agosto 2009, 16:30 pm »

Hola,

AJÁ y yo dije que lo que quieres hacer no tiene sentido pero te di una solución, así que pruebala y deja de decir que MYSQL no puede hacerlo, porque sí puede hacerlo y de hecho te lo puse, puedes comparar las cadenas que quieras almacenandolas todas en un LONGTEXT sin necesidad de recurrir a PHP.

Las historias guardatelas para otra cosa y en vez de leer solo mi primera linea lee todo el mensaje ;) sea hash o sea una cadena, lo que te puse vale igual.

Según he podido leer querías algo así para no tener que comparar todo desde PHP (porque tendrías que almacenar los 500 y los que sea que necesitas..)

Saludos y ojalá te sea de ayuda, lee la función substring y la página que te dejé, estoy seguro de que con esas funciones podrás hacerlo al menos si no estoy equivocado en lo que quieres hacer.
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Importante duda sobre Consulta SQL AVANZADA
« Respuesta #24 en: 5 Agosto 2009, 21:05 pm »

SUBSTRING amigo, devuelve un "pedazo" de una cadena.. ¿ok?
Bueno... ahora... yo tengo que hacerte una pregunta:
Has leido con detalle todos los post de arriba?? hasta el comienzo??? has leido las 2 paginas?
Yo no tengo que "reuperar" strings... tengo que comparar strings con otras strings, y si el 75% coinciden.. o sea, si el 75% son iguales, me tiene de "seleccionar" la entrada esa para devovlerla... pero.. el 75% de los "substrings" de 1 entrada...
Leete bien todo...
En línea

SnakeDrak

Desconectado Desconectado

Mensajes: 243


[GPG: 0x9680A09E]


Ver Perfil
Re: Importante duda sobre Consulta SQL AVANZADA
« Respuesta #25 en: 5 Agosto 2009, 21:33 pm »

Hola,

Perdona pero creo que no es forma correcta la tuya de responer, ya no pienso ayudar más para que me respondan así, si no sabes hacerlo aprende un poco más de SQL a y te recomiendo que te expreses un poco mejor porque ni tú tienes clara la idea de lo que quieres hacer y si la tienes clara no te expresas/escribes correctamente y algunas cosas no se comprenden.

Eso que dices se puede hacer sin problemas, comparar strings con otras strings y ver el % de comparación, tal vez no en 1 sola consulta, pero en 2 consultas podrías hacerlo.

Por supuesto si te intentan ayudar y respondes así pues.. no creo que te ayuden.

Saludos y suerte.
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Importante duda sobre Consulta SQL AVANZADA
« Respuesta #26 en: 5 Agosto 2009, 23:29 pm »

Amigo, amigo.. no es apra que te enojes...
Me he redactado todo de nuevo y aqui te lo digo:

Introduccion:
Imaginate que tengo la carpeta: C:/ARCHIVOS y en ella hay 50.000 archivos .txt con MUCHO texto tentro
Desde mi web, (PHP) ingresando otro .txt en un formulario, analizaré si hay un archivo "parecido" al ingresado en mi carpeta C:/ARCHIVOS..
El archivo ingresado, se considera "parecido" si: Es totalmente igual, o hasta en un 70% (ésto es lo que produce el problema)

Dato:
El algoritmo de INDEXADO a la base de datos de los archivo de la carpeta, consiste en tomar 10 muestras de 5 "caracteres" de los archivos de C:/ARCHIVOS y guardarlos consecutivamente como 1 sola gran palabra...
O sea: Con un motor, voy a entrar a cada uno de los archivos y voy a tomar ese muestreo y guardarlo en la base de datos a esa gran palabra que me quedó..
La palabra será de 50 caracteres, proque son 10 muestras de 5 Caracteres..


Web:
Desde la web se ingresa X archivo y se le toma el mismo muestreo...


Opciones:
En la base de datos puedo guardar las muestras de varias formas.. por ejemplo con separadores o sin..
Con separadores: 12345;34567;98654;98764 (y así hasta llegar a las 10 muestras)
O sin separadores: 1234567898765432 (y así hasta llegar a las 10 muestras)


Lo que tengo que hacer:
Con la muestra que tengo del archivo ingresado, tengo que COMPRAR los tramos...
O sea.. agarro los primeros 5 caracteres de la muestra del arcchivo ingresado, y los comparo con los 5 primeros caracteres de la 1º entrada de la base de datos.. en caso de ser TOTALMENTE IGUALES, "suma 1 punto", despues compara los otros 5.. y así... al finalizar el escanero de la primer entrada de la base de datos, me va a decir: "Tenemos 8 tramos iguales", por lo tanto, este archivo supera el 70% establecido de "comparacion", y se considera que el archivo ingresado y la 1º entrada de la base de datos son IGUALES o PARECIDOS.. y por lo tanto, tengo que "devolver" esa entrada con MYSQL..
Despues sigue comparando toda la base de datos y me tiene que devolver normalmente (como siempre lo ahce) el array con las entradas que son "aceptadas" por éste algoritmo...

La pregunta:
¿Como hago eso? :)

Es como que, necesito una CONSULTA SUPER LOGICA...
Tengo 3 opciones:
*Que realmente exista una manera de darle esa logica en la entrada SQL y me quedo feliz..
*Que no exista esa manera de darle logica a SQL y por lo tanto tengo que "recuperar" todas las lineas de la base de datos y compararlas con un algorirmo normal de PHP
*Ponerme a hacer una base de datos que soporte ese sistema de LOGICA y llenarme muy de guita...
« Última modificación: 5 Agosto 2009, 23:31 pm por Skeletron » En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Importante duda sobre Consulta SQL AVANZADA
« Respuesta #27 en: 9 Agosto 2009, 01:08 am »

Hola.

Aunque no te he comprendido 100% tu solicitud (Asumo que igual que el resto juas  :xD )
quiero intentar ayudar  :rolleyes:

Tu peticion si puede realizarse enteramente dentro de MySQL sin problema alguno, pero ojo con esto porque tus peticiones requeriran mucho consumo de RAM dependiento el tamanio que utilizaras para ir comparando valor por valor (Tu entiendes).

Se me ha ocurrido lo siguiente, Tengo 2 tablas :

Código
  1.  
  2. mysql> SELECT * FROM original;
  3. +--------+---------------+
  4. | codigo | nombres       |
  5. +--------+---------------+
  6. |      1 | Luis Castro   |
  7. |      1 | Pedro Sanchez |
  8. |      1 | Maria Lopez   |
  9. |      1 | Juan Veinte   |
  10. |      1 | Pepe Carlos   |
  11. +--------+---------------+
  12. 5 ROWS IN SET (0,00 sec)
  13.  
  14. mysql> SELECT * FROM archivo;
  15. +---------------+--------+
  16. | palabra       | codigo |
  17. +---------------+--------+
  18. | Pedro Sanchez |      1 |
  19. | Marcia Mama   |      1 |
  20. | Juan Veinte   |      1 |
  21. | Pepe Carlos   |      1 |
  22. +---------------+--------+
  23. 4 ROWS IN SET (0,00 sec)
  24.  

Con los datos ahi mostrados. La tabla original es una tabla guardada en motor MyIsam y la tabla archivo es una tabla guardada en motor Memory... la razon que elegi Memory para la segunda es sencillamente que la segunda tabla sera la encargada de alojar los datos que se encuentren en un 'archivo.txt' no quiero registros definitivos, sino temporales y alojados unicamente en la memoria como si fuesen datos dinamicos  ::) por ende la tabla archivo esta en motor Memory. Los datos a la tabla archivo los cargue con el tipico :

LOAD DATA LOCAL INFILE 'ruta/archivo' INTO archivo;

prosigo... tenemos las 2 tablas anteriores, ahora yo quiero guardar en alguna parte dentro de la DB los valores en modo real que vayan insertandose en la tabla archivo y concuerden con la tabla original, entonces hago una vista ::

Código
  1.  
  2. mysql> CREATE VIEW Ceros AS SELECT strcmp(palabra, nombres) AS total FROM original INNER JOIN archivo HAVING(total) = 0;
  3. Query OK, 0 ROWS affected (0,00 sec)
  4.  
  5.  

la funcion STRCMP funciona igual que en lenguajes C por ende no creo que deba explicarla mucho, pero si te sirve cuando 2 campos comparados son identicos dicha funcion devuelve valor cero, y como en este caso a mi solo me interesan los valores identicos agrego el predicado having igualandolo a cero, asi solo recogos todos los datos identicos en la comparacion  ;)  para gastar menos memoria a la hora de devolver lol...

Ahora viene la mejor parte del asunto :) cree un procedimiento almacenado, para buscar tu objetivo final (Que hayan mas de 70% de registros similares entre ambas tablas)

Código
  1.  
  2. mysql> delimiter $
  3. mysql> CREATE PROCEDURE proceso(OUT palabra CHAR(15), OUT resultado INT)
  4.    -> BEGIN
  5.    -> DECLARE valor_original INTEGER;
  6.    -> DECLARE valor_similar INTEGER;
  7.    -> SELECT COUNT(total) INTO valor_similar FROM Ceros;
  8.    -> SELECT COUNT(*) INTO valor_original FROM original;
  9.    -> SELECT substr((valor_similar/valor_original)%100, 3, 2) INTO resultado;
  10.    -> IF ( resultado > 70 ) THEN
  11.    -> SELECT concat('Hay un 71% o mayor de similares');
  12.    -> ELSE
  13.    -> SELECT concat('Hay un menor de 70% de similares');
  14.    -> END IF;
  15.    -> END;
  16.    -> $
  17. Query OK, 0 ROWS affected (0,00 sec)
  18.  
  19. delimiter> ;
  20.  
  21.  

Perfecto... ahora el procedimiento lo que hace es siempre recoger los valores totales iguales en la vista Cero (Que al ser una vista siempre estara actualizada en tiempo real a cualquier proceso DDL o DML que se apliquen en ambas tablas  ;) ) y basados en dicho resultados, dividido entre el total de todos los registros que componen la tabla original y sacando un porciento, tendremos un resultado :) en este caso solo tenemos 5 valores identicos a la tabla original que contiene 8 registros por lo que si llamamos al procedimiento proceso tendremos :

Código
  1.  
  2. mysql> CALL proceso(@todo, @todito);
  3. +--------------------------------------------+
  4. | concat('Hay un menor de 70% de similares') |
  5. +--------------------------------------------+
  6. | Hay un menor de 70% de similares           |
  7. +--------------------------------------------+
  8. 1 ROW IN SET (0,00 sec)
  9.  
  10. Query OK, 0 ROWS affected (0,00 sec)
  11.  
  12.  
  13.  

Pero si le agregamos mas registros similares a ambas tablas, y luego volvemos a llamar al procedimiento tendriamos ::

Código
  1.  
  2. mysql> CALL proceso(@todo, @todito);
  3. +-------------------------------------------+
  4. | concat('Hay un 71% o mayor de similares') |
  5. +-------------------------------------------+
  6. | Hay un 71% o mayor de similares           |
  7. +-------------------------------------------+
  8. 1 ROW IN SET (0,01 sec)
  9.  
  10. Query OK, 0 ROWS affected (0,01 sec)
  11.  
  12. mysql> SELECT COUNT(total) FROM Ceros;
  13. +--------------+
  14. | COUNT(total) |
  15. +--------------+
  16. |            8 |
  17. +--------------+
  18. 1 ROW IN SET (0,00 sec)
  19.  
  20. mysql> SELECT COUNT(*) FROM original;
  21. +----------+
  22. | COUNT(*) |
  23. +----------+
  24. |       11 |
  25. +----------+
  26. 1 ROW IN SET (0,01 sec)
  27.  
  28.  
  29.  

Vas captando mas o menos lo que intento decir  :silbar:

No se si te sirva... espero que si, recuerda que la tabla archivo al estar en motor memory si reinicias, o apagas la DB todos los datos seran eliminados (ya que solo se alojan temporalmente en la memoria ram, asi sacas mas provecho del espacio de ram y accesa mas rapido a los registros).... pero yo te recomendaria que crees un evento CREATE EVENT dentro de MySQL que cada cierto tiempo haga un TRUNCATE a la tabla archivo o cada vez que vayas a LOAD DATA LOCAL INFILE un archivo nuevo le pases un TRUNCATE primero, seguido de un FLUSH TABLES para que limpies la Cache en caso de que uses Cache (Que no te la recomendaria ya que darias mucho uso constante de TRUNCATE) en caso que no uses Cache, pasa cada cierto tiempo un RESET ayuda para desfragmentar...

Intenta si vas a guardar solo caracteres separados de menor de 255 que sean char, ya que longtext o blob o text o similar... la verdad, consume mucho espacio innecesario de memoria y si no vas a dar uso de datos binarios no vale la pena.

Un saludo :)
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Importante duda sobre Consulta SQL AVANZADA
« Respuesta #28 en: 10 Agosto 2009, 00:35 am »

Wow..
Muchas Gracias..
Me diste a entender principalmente que me tengo que leer un BUEN tutorial de MySQL :)

Muchas gracias.. ya volveré al psot a analizar bin todo eso cuando conozca mas de MySQL
En línea

Páginas: 1 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Informacion importante sobre IPV6.. revolucion en las T.I
Redes
ThonyMaster 5 4,597 Último mensaje 15 Mayo 2011, 21:49 pm
por fuenteRea
Duda importante sobre wordpress
Dudas Generales
ryan26 7 3,635 Último mensaje 6 Junio 2012, 15:05 pm
por ryan26
Duda de java importante
Java
andrecid 6 3,334 Último mensaje 29 Enero 2014, 18:21 pm
por 0x98364
Consulta avanzada de SQL server con like
Programación General
ppfenix79 0 1,739 Último mensaje 19 Enero 2017, 23:35 pm
por ppfenix79
[AYUDA] ¿Dónde conseguir información avanzada sobre informática?
Dudas Generales
AlbertoPerez 3 3,070 Último mensaje 18 Julio 2017, 07:15 am
por Randomize
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines