Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Fusionar varias consultas en una

Estas en el tema de Fusionar varias consultas en una en el foro de Mysql en Foros del Web. Hola foreros! Hace tiempo que no paso por aquí.. todo bien? Al lio... Bueno pues el caso es que tengo dos tablas relacionadas entre si, ...
  #1 (permalink)  
Antiguo 09/11/2015, 04:09
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 15 años, 11 meses
Puntos: 8
Fusionar varias consultas en una

Hola foreros! Hace tiempo que no paso por aquí.. todo bien? Al lio...

Bueno pues el caso es que tengo dos tablas relacionadas entre si, y el caso es quiero obtener unos datos y los obtengo, pero me gustaría agilizar el proceso en una sola consulta,ahora a ver si algún experto en Sql me pudiese echar un cable...

A ver vamos por partes, simplifico las tablas para ilustrar el ejemplo.

Primera tabla : textos

(#texto_id,texto_nombre,texto_tipo)

Segunda tabla: relaciones

(#relacion_id,relacion_texto_categoria, relación_texto_descendiente)

Funcionan de la siguiente forma, en la primera tabla almaceno una serie de textos, que pueden ser de diferentes tipos, para llenar las tablas usaremos los siguientes datos :

Primera tabla :

(1,"noticia 1"," noticias")
(2,"noticia 2","noticias")
(3,"primer tag","tags")
(4,"segundo tag", tags)

Segunda tabla :

(1,1,3)
(1,1,4)

De este modo, una noticia puede tener N tags.

Bíen llegado a este punto, creo que se entiende que, almaceno los valores en la primera tabla, y luego ago una relación en la segunda, pudiendo usar la segunda tabla en infinidad de usos.

El caso es que, siguiendo el ejemplo anterior, lo que pretendo es crear un buscador de "tags" de noticias, que el usuario ingrese parte de un tag, y se le muestre las noticias que contengan los tags que contengan el texto ingresado.

Por ejemplo , si introduzco "prime", la respuesta tendría que ser noticia 1.

Y bueno para hacer esto, lo consigo mediante varias consultas,

primero busco en la tabla1 coincidencias con texto_nombre con la string ingresada,

luego, por cada "tag" encontrada, busco en la tabla relaciones coincidencias con este id, en el campo relacion_texto_descendiente, ya que los tags son descendientes de las noticias,

Una vez tengo los id de las noticias ( con un inner join compruebo que tengan en el campo texto_tipo="noticias", por que tengo otro tipo de textos que no son noticias ), simplemente obtengo los datos de la tabla textos con los id de noticias que he obtenido.


Pues, el caso es que son 3 consultas, y entiendo que se tiene que poder hacer con una, mezclando subconsultas, pero mis conocimientos no llegan a tanto...

Gracias por leer el post, y por la ayuda que me puedas prestar de antemano.
Un saludo.
  #2 (permalink)  
Antiguo 09/11/2015, 07:09
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 15 años, 11 meses
Puntos: 8
Respuesta: Fusionar varias consultas en una

Bueno pues ya tengo la solución, un compi me ha ayudado.

Pego la consulta por si a alguien le puede servir de referencia.
Código MySQL:
Ver original
  1. select * FROM `textos`
  2. WHERE `text_id` in
  3.     (SELECT `relacion_texto_categoria_id`
  4.       FROM `relaciones` where `relacion_texto_descendente_id`
  5.             in(SELECT `texto_id` FROM `textos`
  6.             WHERE `texto_nombre` like '%rafa%' and`text_tipo`='tags'))
  7. and `text_tipo`='noticias'



Un saludo.

Última edición por gnzsoloyo; 09/11/2015 a las 07:34 Razón: Mal formateado: ILEGIBLE
  #3 (permalink)  
Antiguo 09/11/2015, 07:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Fusionar varias consultas en una

Me parece muy rebuscado y bastante ineficiente.
Probemos por acá:
Código SQL:
Ver original
  1. SELECT *
  2. FROM textos T
  3.     INNER JOIN  relaciones R ON T.text_id= R relacion_texto_categoria_id
  4.     INNER JOIN textos TX ON  R.relacion_texto_descendente_id = TX.texto_id
  5. WHERE TX.texto_nombre LIKE '%rafa%'
  6.     ANDTXtext_tipo ='tags'
  7.      AND T.text_tipo='noticias'
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 11/11/2015 a las 06:33
  #4 (permalink)  
Antiguo 11/11/2015, 04:27
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 15 años, 11 meses
Puntos: 8
De acuerdo Respuesta: Fusionar varias consultas en una

Vaya! pues tienes toda la razón, esta consulta es mucho mas eficiente.

Muchas gracias por tu ayuda.
  #5 (permalink)  
Antiguo 11/11/2015, 06:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Fusionar varias consultas en una



__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campo, fusionar, join, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:40.