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

Busqueda condicional

Estas en el tema de Busqueda condicional en el foro de Mysql en Foros del Web. Un saludo a la comunidad. Tengo una consulta, que obtiene datos de varias tabla, segun la importancia de cada una las uno con "INNER JOIN" ...
  #1 (permalink)  
Antiguo 20/09/2010, 02:18
 
Fecha de Ingreso: junio-2009
Mensajes: 128
Antigüedad: 14 años, 10 meses
Puntos: 17
Busqueda condicional

Un saludo a la comunidad.

Tengo una consulta, que obtiene datos de varias tabla, segun la importancia de cada una las uno con "INNER JOIN" o "LEFT OUTER JOIN".

El objetivo de la consulta es obtener un piso con toda su informacion relacionada (carasteristicas, provincias, fotos, etc...).

Concretamente en la tabla de las fotos, se pueden diferenciar la foto principal y el resto. Aunque no necesariamente tiene por que haber, o bien foto principal, o bien foto alguna(puede no haber fotos tambien).

El objetivo de todo es generar un listado, donde aparezca la foto principal del piso.

Esta es la consulta:
Código PHP:
$consulta "SELECT inmuebles.modo_inmueble, inmuebles.superficie_construida_inmueble, inmuebles.dormitorios_inmueble, inmuebles.post_precio, inmuebles.id_inmueble, inmuebles.nombre_inmueble, inmuebles.descripcion_inmueble, inmuebles_subtipos.nombre_inmueble_subtipo".$_SESSION['idioma'].", inmuebles_fotos.foto_inmueble, paises.nombre_pais, provincias.nombre_provincia, areas.nombre_area FROM  inmuebles INNER JOIN inmuebles_subtipos ON (inmuebles.id_inmueble_subtipo = inmuebles_subtipos.id_inmueble_subtipo) LEFT OUTER JOIN inmuebles_fotos ON (inmuebles.id_inmueble = inmuebles_fotos.id_inmueble) INNER JOIN paises ON (inmuebles.id_pais = paises.id_pais) INNER JOIN provincias ON (inmuebles.id_provincia = provincias.id_provincia) INNER JOIN areas ON (inmuebles.id_area = areas.id_area)";   //Obtiene datos de las diferentes tablas

$complete[$link]= " inmuebles_fotos.foto_principal='si' "$link=$link+1;     //esta parte esta llena de complete como este para luego completar la busqueda en el bucle

for ($i=0;$i<$link;$i++) {  if($i==0){ $consulta.= " WHERE ".$complete[$i]; } else {$consulta.= " AND ".$complete[$i]; }}
        
$consulta.="GROUP BY inmuebles.id_inmueble ORDER BY  inmuebles_fotos.foto_principal DESC, inmuebles.precio_inmueble ASC"

El problema esta en que si uso la sentencia "inmuebles_fotos.foto_principal='si'" no me aparecen las que no tengan fotos o no tengan fotos principal.
Si la elimino, aparecen todos los pisos, con las fotos, pero evidentemente las fotos no son la principal, si no, el primer registro introducido en la bbdd (del piso concreto)

y aqui, la dura pregunta ¿Es posible indicar como condicional este campo? en el sentido de que si existe, utilice la principal, si no existe, use cualquiera
  #2 (permalink)  
Antiguo 20/09/2010, 03:18
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Busqueda condicional

No entiendo bien ese GROUP BY inmuebles.id_inmueble. ¿en tu tabla inmuebles se repite el id_inmueble?

Yo sabría hacer tu consulta usando una subconsulta, pero si tu listado de inmubles es muy largo y tienes muchos miles de registros podría cargar mucho.... Aunque esto siempre se puede cachear en archivos txt por ejemplo

Sería algo asi, con los nombres de tablas/campos que no concuerdan con los tuyos, pero para que veas:

select inmuebles.nombre,(select fotos.imagen from fotos where fotos.id_inmueble=inmuebles.id ORDER BY fotos.principal DESC LIMIT 0,1) as imagen from inmuebles

Por cada inmueble hacemos esa subconsulta que ordena primero la tabla fotos por el campo principal, de modo que si tienes el campo principal relleno de 'si' y 'no' al ordenarlo de mayor a menor cogerá primero alguna que tenga 'si', y si no encuentra ninguna rellenaría imagen con 'NULL'


EDIT: Mira, hice una busqueda en google por alguien con tu mismo problema y en el foro oficial dan una solucion parecida: http://forums.mysql.com/read.php?115...619#msg-111619
  #3 (permalink)  
Antiguo 20/09/2010, 03:55
 
Fecha de Ingreso: junio-2009
Mensajes: 128
Antigüedad: 14 años, 10 meses
Puntos: 17
Respuesta: Busqueda condicional

Man, maravillo, me acabas de abrir una puerta que no sabia que existia. las subconsultas.

Va de puta madre y es precisamente lo que necesitaba, muchas gracias :)


P.D: lo del GROUP BY, era necesario, porque si ejecutaba la consulta sin el, se repetia tantas veces como fotos habia por piso, gracias a la maravillosa subconsulta, ya no es necesario
  #4 (permalink)  
Antiguo 20/09/2010, 04:00
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Busqueda condicional

De nada amigo, yo también las amo con locura jejeje

Etiquetas: condicional, busquedas
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 14:11.