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

Consulta multiTabla

Estas en el tema de Consulta multiTabla en el foro de Mysql en Foros del Web. Hola! Estoy acabando una nueva web y me encuentro son un problema sin salida, os cuento! Tengo dos tablas: inmuebles y características relacionadas del tipo ...
  #1 (permalink)  
Antiguo 18/02/2011, 02:21
 
Fecha de Ingreso: mayo-2010
Mensajes: 3
Antigüedad: 13 años, 11 meses
Puntos: 0
Pregunta Consulta multiTabla

Hola!

Estoy acabando una nueva web y me encuentro son un problema sin salida, os cuento!

Tengo dos tablas: inmuebles y características relacionadas del tipo 1:N
desde un buscador deseo buscar todos los inmuebles que coincidan con las características que marque el usuario. Por ejemplo: m2 >= 120, ascensor = si, habitaciones >= 3

La consulta que genera el sistema para este caso sigue este modelo:

SELECT DISTINCT inmuebles.ID FORM inmuebles INNER JOIN inmu_caract ON inmu_caract.ID_inmueble = inmuebles.refe
WHERE inmuebles.estado = 'activo'
and (inmu_caract.ID_caracteristica = '57' and inmu_caract.info >= 120)
and (inmu_caract.ID_caracteristica = '60' and inmu_caract.info = 'si')
and (inmu_caract.ID_caracteristica = '8' and inmu_caract.info >= 3)

Lo que hagos es cruzar las dos tablas para buscar resultados cuando el ID coincida. Pero esta consulta no me devuelve resultados a pesar de que en la base de datos hay coincidencias.

Entiendo porqué: no hay una misma caracteristica que su ID coincida a la vez con 57 ,60 y 8
pero no soy capaz de encontrar una solución.
He probado con subconsultas SELECT, pero me peta el navegador.

Alguién sabría como hacerlo, me sería de gran ayuda!
Gracias.
  #2 (permalink)  
Antiguo 18/02/2011, 03:17
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta multiTabla

Se me ocurre...

Código MySQL:
Ver original
  1. SELECT inmuebles.ID
  2. FORM inmuebles
  3. WHERE inmuebles.estado = 'activo'
  4.      AND inmuebles.ID
  5.          IN (SELECT DISTINCT inmuebles.ID
  6.                FORM inmuebles
  7.                INNER JOIN inmu_caract
  8.                ON inmu_caract.ID_inmueble = inmuebles.refe
  9.                WHERE inmu_caract.ID_caracteristica = '57' and inmu_caract.info >= 120)
  10.      AND inmuebles.ID
  11.          IN (SELECT DISTINCT inmuebles.ID
  12.                FORM inmuebles
  13.                INNER JOIN inmu_caract
  14.                ON inmu_caract.ID_inmueble = inmuebles.refe
  15.                WHERE inmu_caract.ID_caracteristica = '60' and inmu_caract.info = 'si')
  16.      AND inmuebles.ID
  17.         IN (SELECT DISTINCT inmuebles.ID
  18.               FORM inmuebles
  19.               INNER JOIN inmu_caract
  20.               ON inmu_caract.ID_inmueble = inmuebles.refe
  21.               WHERE inmu_caract.ID_caracteristica = '8' and inmu_caract.info >= 3)

Si?

Tantas caracteristicas distintas tienen los edificios para justificar una relación 1:n? Quizas si que es mas eficiente de cara a reducir espacio en disco pero... el rendimiento de la solucion que te he dado no se... se puede mejorar agregando indices... pero tambien usan espacio de disco....

Una estructura tipo

ID_inmueble | m2 | ascensor | habitaciones | .... | nombreCaracteristicaN

si n no es muy grande podria servir no....?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 18/02/2011 a las 03:31
  #3 (permalink)  
Antiguo 18/02/2011, 03:46
 
Fecha de Ingreso: mayo-2010
Mensajes: 3
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Consulta multiTabla

Muchas gracias por responder.
Lo ideé así porque un inmuebles tiene cientos de características.
Además desde un panel de control se pueden añadir más características si se quieren.

Voy a probar lo que me dices haber que tal.
gracias!!
  #4 (permalink)  
Antiguo 18/02/2011, 07:14
 
Fecha de Ingreso: mayo-2010
Mensajes: 3
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Consulta multiTabla

Nada no hay manera.
Me sale un Internal Server Error, y eso que genere la consulta más sencilla

Código MySQL:
Ver original
  1. SELECT DISTINCT inmuebles.ID
  2. FROM inmuebles
  3. WHERE inmuebles.estado = 'activo'
  4. and inmuebles.ID IN (SELECT DISTINCT inmuebles.ID
  5. FROM inmuebles
  6. INNER JOIN inmu_caract
  7. ON inmu_caract.ID_inmueble = inmuebles.refe
  8. WHERE inmu_caract.ID_caracteristica = '57' and inmu_caract.info >= 2) LIMIT 0, 12

De todas formas muchas gracias por responder!!

Etiquetas: bases-de-datos
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 05:23.