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

[SOLUCIONADO] hacer dos inner join

Estas en el tema de hacer dos inner join en el foro de Bases de Datos General en Foros del Web. Saludos. Tengo esta consulta que me funciona perfectamente: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código sql: Ver original SELECT * FROM productos INNER JOIN categorias ON productos . type_prod ...
  #1 (permalink)  
Antiguo 18/02/2010, 09:01
Avatar de juaniquillo
Colaborador
 
Fecha de Ingreso: noviembre-2005
Ubicación: San Juan, Puerto Rico
Mensajes: 5.745
Antigüedad: 18 años, 5 meses
Puntos: 281
hacer dos inner join

Saludos. Tengo esta consulta que me funciona perfectamente:

Código sql:
Ver original
  1. SELECT * FROM productos INNER JOIN categorias ON productos.type_prod = categorias.cat_id_cat WHERE (productos.title_prod LIKE '%variable_busqueda%' OR productos.desc_prod LIKE '%variable_busqueda%') AND (productos.status_prod = 1 AND categorias.status_cat = 1)

Añado la tabla de categorías para poner la condicional para que solo si la categoría está habilitada se muestre el producto. Ahora, necesito también buscar en la tabla de tags asociados a los productos. Soponía que debía hacer algo así:

Código sql:
Ver original
  1. SELECT * FROM productos INNER JOIN categorias ON productos.type_prod = categorias.cat_id_cat INNER JOIN tags ON tags.id_padre_tags = productos.id_prod WHERE (productos.title_prod LIKE '%variable_busqueda%' OR productos.desc_prod LIKE '%variable_busqueda%') OR (tags.tags_tags LIKE '%variable_busqueda%) AND (productos.status_prod = 1 AND categorias.status_cat = 1)

pero no me funciona. Aún sin poner la condicional "tags.tags_tags LIKE '%variable_busqueda%" no encuentra ningún producto. ¿Cómo debería hacer el segundo INNER JOIN entonces, o hay alguna otra forma mejor de hacerlo?
__________________
Por fin.. tengo algo parecido a un blog
Y por lo visto ya estoy escribiendo...
  #2 (permalink)  
Antiguo 18/02/2010, 09:10
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: hacer dos inner join

Hola, juaniquillo.

En este caso probablemente lo que necesitas es hacer un UNION para unir los resultados de ambas tablas (tags y categorias) y no un JOIN.

Traslado el tema a la sección de Bases de Datos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 18/02/2010, 09:15
Avatar de juaniquillo
Colaborador
 
Fecha de Ingreso: noviembre-2005
Ubicación: San Juan, Puerto Rico
Mensajes: 5.745
Antigüedad: 18 años, 5 meses
Puntos: 281
Respuesta: hacer dos inner join

Gracias David. Voy a probarlo y te digo que tal.
__________________
Por fin.. tengo algo parecido a un blog
Y por lo visto ya estoy escribiendo...
  #4 (permalink)  
Antiguo 18/02/2010, 10:17
Avatar de juaniquillo
Colaborador
 
Fecha de Ingreso: noviembre-2005
Ubicación: San Juan, Puerto Rico
Mensajes: 5.745
Antigüedad: 18 años, 5 meses
Puntos: 281
Respuesta: hacer dos inner join

Estuve leyendo acerca de UNION y no creo que es lo que necesito ya que no quiero unir las tablas. yo quiero mostrar sólo los productos que concuerden con la variable de la búsqueda y que los tags de esos productos (que tengo en otra tabla) también concuerden con la misma variable.
__________________
Por fin.. tengo algo parecido a un blog
Y por lo visto ya estoy escribiendo...
  #5 (permalink)  
Antiguo 18/02/2010, 10:20
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: hacer dos inner join

¿Podrías poner un ejemplo de los datos que tienes en las tablas y el resultado que esperas?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 18/02/2010, 12:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: hacer dos inner join

juaniquillo,
si la tabla tags está relacionada con la tabla productos por medio de los campos id_prod de productos e id_padre_tags de tags, esto que te ocurre es lógico, pues imagino que no todos los productos tendrán tags, y al usar INNER JOIN sólo aquellos productos que tienen tags y las categorías relacionadas serán objeto de la búsqueda. TEndrías que usar LEFT JOIN en los cruces para que buscara en todos los productos, tengan o no categorías, y tengan o no tags...
Por otra parte, creo que la consulta con OR se debe hacer dentro de un sólo paréntesis...
(productos.title_prod LIKE '%variable_busqueda%' OR productos.desc_prod LIKE '%variable_busqueda%' OR tags.tags_tags LIKE '%variable_busqueda%)

No obstante, el problema es el cruce de datos con INNER JOIN cuando no todos los productos tienen asignadas categorías, o no todos los productos tienen asignados tags.
saludos, amigo juaniquillo.
  #7 (permalink)  
Antiguo 18/02/2010, 13:52
Avatar de juaniquillo
Colaborador
 
Fecha de Ingreso: noviembre-2005
Ubicación: San Juan, Puerto Rico
Mensajes: 5.745
Antigüedad: 18 años, 5 meses
Puntos: 281
Respuesta: hacer dos inner join

ahhh!! No conocía el LEFT JOIN. Ahora sí, me funciona perfectamente. Gracis de nuevo jurena. Gracias también a ti David

Saludos.
__________________
Por fin.. tengo algo parecido a un blog
Y por lo visto ya estoy escribiendo...

Etiquetas: dos, join
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 21:13.