Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Consulta "query" SQL [SOLUCIONADO]
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Consulta "query" SQL [SOLUCIONADO] 
 
Hola

Esta consulta va especialmente dirigida al maestro de las bases de datos, nuestro amigo shordi.

Tengo una base de datos MySQL con algunas tablas, las que me interesan para esto son las que se ven en la imagen:

 consultasql

La consulta que uso hasta ahora es algo como:

SELECT `nr`,`call`,`freq`,`dxcall`,`comment`,`time`,`band` FROM spots WHERE band = '6' ORDER BY time DESC LIMIT 30;


Esta tabla, spots, se está llenando en tiempo real desde una conexión telnet usando un script perl, pero necesito obtener el valor de un campo de la tabla c_locator a partir del campo call y dxcall (son campos diferentes, pero almacenan el mismo tipo de dato) de la tabla spots

Lo que quiero es crear una consulta cruzada entre las tablas spots y c_locator, teniendo en cuenta que los campos de spots call y dxcall contienen una cadena que podría hallarse en la tabla c_locator, de la que comparando primero cada campo citado con callsign, me debe devolver el resultado de lo que contenga loc.

Es decir, ¿hay alguna manera de obtener c_locator.loc a partir de spots.call y spots.dx.call sólo usando sql para devolver esos campos en la consulta junto a los otros?

Además me interesa que la tabla maps se actualice con los resultados de esa consulta.

No se si me he explicado bien... en cualquier caso estoy seguro de que se puede diseñar mejor la bd (de hecho estoy viendo diferencias en el tamaño de campos semejantes), pero hay que tener en cuenta que como hay dos campos teóricamente iguales, aunque con diferente contenido en cada registro, no puedo establecer relaciones entre las tablas, o eso creo  

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Consulta "query" SQL 
 
Prueba con

SELECT `s.nr`,`s.call`,`s.freq`,`s.dxcall`,`s.comment`,`s.time`,`s.band` , `c.loc` FROM spots  AS s
INNER JOIN  `c_locator ` AS c ON   `c.loc`= `s.clall` OR `c.loc`= `s.dx`
 AND s.band = '6' ORDER BY time DESC LIMIT 30;
 


Creo que algo parecido es lo que quieres, lo que no se es el tipo de unión que quieres entre las dos tablas
 



 
angelnu - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Consulta "query" SQL 
 
Gracias por tu tiempo Angelnu, pero no funciona. Hay errores en la consulta, que una vez eliminados tampoco producen el resultado esperado.

De todas formas estoy dando vueltas al asunto, y quizás sea mejor emplear procedimientos almacenados, porque realmente no estoy seguro si la consulta en sí misma es posible... Ten en cuenta que aquí quiero matar dos pájaros de un tiro, y es que mientras que quiero facilitar la consulta combinada de las dos tablas, también necesito que parte de los resultados se inserten en la tercera tabla.

No sé si será descabellado lo que digo, teniendo en cuenta que la tabla spots se llena razón de unos 2000 registros diarios (aunque registros más antiguos de 3 meses se vayan eliminando, y la tabla maps se va borrando a razón de antigüedad mayor de 1 hora.

Todo esto en la actualidad se realiza mediante consultas sencillas y código, pero la idea era delegar estas operaciones a la base de datos para automatizar todo en lo posible y liberar trabajo y código a la aplicación.

Repito que seguramente será necesario hacer cambios en la estructura de las tablas, pero esa es la idea básica.

 consultasql_1365235343_503164

Aquí un extracto del contenido de las 3 tablas:

Tabla spots
 tabla_spots


Tabla c_locator
 tabla_c_loc

Y tabla maps
 tabla_map

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Consulta "query" SQL 
 
Jesús:

Esto.¿ Qué aplicación usaste para ver las tablas como las has mostrado ?.
Con esto supongo que se puede ver visualmente las relaciones.¿ Es valido para Sqlite o solo para MySQL ?.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Consulta "query" SQL 
 
La primera con phpmyadmin del servidor, los extractos con un programa que se llama DBeaver, y es muy bueno porque permite conexiones a servidores remotos y muchas otras cosas. Pero muy a mi pesar está escrita en Java y no me gustan las aplicaciones en Java!!

http://dbeaver.jkiss.org/

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Consulta "query" SQL 
 
Resulta muy difícil ayudar sin comprender la organización y utilización de las tablas

Yo creo que no se puede hacer una consulta de selección y una consulta de inserción al mismo tiempo.
Citar:
Ten en cuenta que aquí quiero matar dos pájaros de un tiro, y es que mientras que quiero facilitar la consulta combinada de las dos tablas, también necesito que parte de los resultados se inserten en la tercera tabla.



Prueba a hacer una subconsulta para obtener los datos y después hacer el INSERT en la otra tabla.

No se si es adecuado utilizar triggers o funciones en tu bd.

Yo particularmente delego muchas operaciones a la Bd (agrupo albaranes en facturas con una función, triggers para cuando se actualiza un dato cambia datos en varias tablas etc.)
 



 
angelnu - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Consulta "query" SQL 
 
angelnu escribió: [Ver mensaje]
Resulta muy difícil ayudar sin comprender la organización y utilización de las tablas


Lo sé, lo sé... he tratado de mostrar todos los detalles posibles, pero aún así entiendo que es difícil comprender el uso. Sin embargo, creo que voy a estudiar la posibilidad de usar triggers o procedimientos para la inserción en la tercera tabla, aparte de una mejor organización. Pero sigo buscando la forma de hacer la consulta inicial combinando las tabas spots y c_locator, ya que es la base para luego poder insertar en la otra. Probaré con subconsultas... qué lío!

Para complicar las cosas aún más, resulta que el sistema está en producción, así que voy a tener que hacer un sistema paralelo hasta que funcione y luego eliminar el viejo.

Gracias por tus consejos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Consulta "query" SQL 
 
Ante todo, gracias por el título, pero me temo que  no es merecido,    
Después, no me gusta nada la estructura de tablas que planteas... pero, sin entrar a cambiarla tengo algunas dudas:

1. ¿En call y dxcall pueden haber valores duplicados? es decir, que (call y dxcall contengan lo mismo)

2.-Si los dos campos contienen datos requeridos(que existan  ambos en c_locator) ¿se debe generar un registro en maps o dos? Si es sólo uno ¿cuál de los dos tiene preferencia?

3.-¿Que motor de datos usas en MySQL: MyIsam, InnoDB?

Creo que esí es posible, pero depende de estas cosas....

Saludos.
 



 
última edición por shordi el Sabado, 06 Abril 2013, 12:56; editado 1 vez 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Consulta "query" SQL 
 
Uf, yo había leído maestro de las tablas.

Así que Shordi es como Moises.Anda para que digas luego que no te va el rollo de la religión.

Siempre ha demostrado tener "muchas tablas" con las base de datos.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Consulta "query" SQL 
 
shordi escribió: [Ver mensaje]
Ante todo, gracias por el título, pero me temo que  no es merecido,    
Después, no me gusta nada la estructura de tablas que planteas... pero, sin entrar a cambiarla tengo algunas dudas:


A mi tampoco, pero llevan mucho tiempo hechas y se han ido añadiendo cosas con el tiempo. Ahora es el momento de arregarlo, jeje.

shordi escribió: [Ver mensaje]

1. ¿En call y dxcall pueden haber valores duplicados? es decir, que (call y dxcall contengan lo mismo)


Sí, pueden haber valores duplicados. Piensa en ambos campos como si fueran nombres de personas.
Por otra parte, la tabla c_locator contiene callsign y loc como campos, de los cuales callsign es único y loc puede tener dupes.
Esta tabla spots es muy dinámica, entran unos 100 registros a la hora y se deben borrar los que superen cierta antigüedad. El número medio de registros es 150000.

Piensa en esta tabla como un listín telefónico, a cada valor de callsign le corresponde un loc. Lo que es lo mismo, si empleamos la suposición anterior: a cada nombre le corresponde un teléfono. (Aunque el ejemplo no es muy acertado, pues no hay telefonos duplicados en la vida real, tendríamos que pensar que vive mucha gente en la misma casa compartiendo teléfono, jajaja).
Esta tabla es prácticamente estática, conteniendo 1,3 millones de registros.

Como los campos call y dxcall contienen "nombres", hay que buscar el "teléfono" en el listín, o sea la tabla c_locator

shordi escribió: [Ver mensaje]

2.-Si los dos campos contienen datos requeridos(que existan  ambos en c_locator) ¿se debe generar un registro en maps o dos? Si es sólo uno ¿cuál de los dos tiene preferencia?


Sucede que en los registros que van entrando a la tabla spots, puede ocurrir que alguno de los dos campos call y dxcall no se encuentre en la tabla c_locator. Sólo cuando se encuentre alguna coincidencia en ambos, es decir, completemos las dos parejas de call->loc y dxcall->loc, podríamos insertar datos en la tercera tabla maps, junto a la hora del registro y la banda.

Es decir, solo un registro por cada registro de la tabla spots que cumpla esas condiciones. Pero ese registro se inserta en tiempo real, es decir, cada vez que se inserta un spot en la tabla spots se comprueba que las 2 parejas de call/locator se pueden realizar y se inserta ahora en la tabla maps solo lo que corresponde a ese registro. No se hace para toda la tabla entera.

shordi escribió: [Ver mensaje]

3.-¿Que motor de datos usas en MySQL: MyIsam, InnoDB?


MyISAM


shordi escribió: [Ver mensaje]

Creo que esí es posible, pero depende de estas cosas....

Saludos.


Yo ya me he quedado sin ideas, he intentado muchas cosas, pero sin duda debería empezar por estructurar mejor los datos. ¿Qué me aconsejas?

Gracias y saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron