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

ayuda con esta consulta

Estas en el tema de ayuda con esta consulta en el foro de Mysql en Foros del Web. Buenas tardes, tengo una consulta q me tiene loco y no la he podido sacar Tengo las situientes tablas: municipios: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver ...
  #1 (permalink)  
Antiguo 03/03/2011, 13:52
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
ayuda con esta consulta

Buenas tardes, tengo una consulta q me tiene loco y no la he podido sacar

Tengo las situientes tablas:

municipios:

Código MySQL:
Ver original
  1. CREATE TABLE `municipios` (
  2.   `COD_MUN` int(11) NOT NULL,
  3.   `NOM_MUN` char(80) default NULL,
  4.   PRIMARY KEY  (`COD_MUN`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

tipo imnueble:
Código MySQL:
Ver original
  1. CREATE TABLE `tipo_inmueble` (
  2.   `COD_TIP_INM` int(2) NOT NULL,
  3.   `NOM_TIP_INM` char(20) default NULL,
  4.   PRIMARY KEY  (`COD_TIP_INM`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;


zonas:

Código MySQL:
Ver original
  1. CREATE TABLE `zonas` (
  2.   `COD_ZON` int(4) NOT NULL,
  3.   `NOM_ZON` varchar(50) default NULL,
  4.   PRIMARY KEY  (`COD_ZON`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

y mi tabla principal: inmuebles:

Código MySQL:
Ver original
  1. CREATE TABLE `inmuebles` (
  2.   `COD_INM` int(11) NOT NULL,
  3.   `COD_TIP_INM` int(2) NOT NULL,
  4.   `COD_MUN` int(11) NOT NULL,
  5.   `COD_ZON` int(4) NOT NULL,
  6.   `DES_INM` varchar(150) default NULL,
  7.   `VAL_INM` float default NULL,
  8.   `ARE_INM` float default NULL,
  9.   `NUM_HAB_INM` int(2) default NULL,
  10.   `NUM_BAN_INM` int(2) default NULL,
  11.   `NUM_GAR_INM` int(2) default NULL,
  12.   `EST_SOC_INM` int(1) default NULL,
  13.   PRIMARY KEY  (`COD_INM`),
  14.   KEY `FK_TIPO_INMUEBLE` (`COD_TIP_INM`),
  15.   KEY `FK_MUNICIPIO_INMUEBLE` (`COD_MUN`),
  16.   KEY `FK_ZONA_INMUEBLE` (`COD_ZON`)
  17. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

La consulta consiste en lo siguiente:
Mostrar por ejemplo: Inmuble de TIPO: Apartamento o de TIPO: Casa
Inmueble de TIPO: Apartamento y del municipio: Suarez

Es decir combiar or y and

Lo hice de la siguiente manera y funciona: solo que cuando yo escojo tipo Apartamento y municipio Suarez, en los resultados tambien se muestran los inmuebles de tipo CASA

No se como hacer los OR combinados con AND

esta es la consulta:

Código MySQL:
Ver original
  1. SELECT i.COD_INM, i.DES_INM, i.VAL_INM, i.ARE_INM, i.NUM_HAB_INM, i.NUM_BAN_INM, i.NUM_GAR_INM, i.EST_SOC_INM, m.NOM_MUN, ti.NOM_TIP_INM, z.NOM_ZON
  2. inmuebles i
  3. INNER JOIN municipios m
  4. USING ( COD_MUN )
  5. )
  6. INNER JOIN tipo_inmueble ti
  7. USING ( COD_TIP_INM )
  8. INNER JOIN zonas z
  9. USING ( COD_ZON )
  10. WHERE ti.COD_TIP_INM =1
  11. OR m.COD_MUN =3
  12. OR z.COD_ZON =0;

Espero me puedan ayudar, gracias
  #2 (permalink)  
Antiguo 04/03/2011, 01:34
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: ayuda con esta consulta

Es que si quieres los apartamentos de Suarez tienes que poner AND porque ahí te están saliendo los que son apartamentos O están en Suarez. También te estarán saliendo los apartamentos que no esten en Suarez.
  #3 (permalink)  
Antiguo 04/03/2011, 09:41
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: ayuda con esta consulta

Es que utilizo OR porque es para un buscador y tengo las tres opciones, pero el usuario puede escojer una de las opciones o combinarlas como el quiera
  #4 (permalink)  
Antiguo 04/03/2011, 10:00
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: ayuda con esta consulta

Cita:
Iniciado por oscarbt Ver Mensaje
Es que utilizo OR porque es para un buscador y tengo las tres opciones, pero el usuario puede escojer una de las opciones o combinarlas como el quiera
Entonces, si las combina, lo que corresponde es el AND y no el OR, ya que si quiere que tenga las X opciones al mismo tiempo, esa es la forma.
Si las condiciones son opcionales en todos los casos, el OR te devolverá los registros con que cumplan al menos con una de las opciones... sin importar cuál sea.
Esa es la forma en que funciona la lógica...
Para resolver tu dilema lo que tienes que plantearte es cuál es la condición que debe cumplirse y cuales son las opciones agregadas.
Si, por ejemplo, tienes una mandatoria y dos opcionales, pero deben darse al menos dos condiciones, es:
Cita:
condicion1 AND (condicion2 OR condicion3)
De ese modo la seguda parte se evalúa como un conjunto...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 04/03/2011, 10:06
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: ayuda con esta consulta

Código MySQL:
Ver original
  1.     i.COD_INM,
  2.     i.DES_INM,
  3.     i.VAL_INM,
  4.     i.ARE_INM,
  5.     i.NUM_HAB_INM,
  6.     i.NUM_BAN_INM,
  7.     i.NUM_GAR_INM,
  8.     i.EST_SOC_INM,
  9.     m.NOM_MUN,
  10.     ti.NOM_TIP_INM,
  11.     z.NOM_ZON
  12.     inmuebles i INNER JOIN municipios m USING (COD_MUN )
  13.     INNER JOIN tipo_inmueble ti USING (COD_TIP_INM)
  14.     INNER JOIN zonas z USING ( COD_ZON )
  15.     ti.COD_TIP_INM =1 AND (m.COD_MUN =3 OR z.COD_ZON =0);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 07/03/2011, 10:36
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: ayuda con esta consulta

gnzsoloyo, Hay un inconveniente con esta consulta y es el siguiente:

El usuario no puede buscar unicamente por tipo de inmueble, tiene que escojer las otras dos opciones..Ahora el otro problema es que cuando escoje por ejemplo tipo inmueble: Casa

y Municipio: Cali

El resultado de busqueda tambien arroja los tipos de inmueble Apartamento que se encuentran en el municipio de Cali

es ahi donde la consulta deberia ser COT_TIP_MUN=1 and COD_MUN=3

Donde 1 es Casa y 3 Cali, pero si el usuario solo desea buscar por Casa?....

agradezco la ayuda
  #7 (permalink)  
Antiguo 07/03/2011, 11:27
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: ayuda con esta consulta

En tu caso no hay forma de hacer una consulta sólo con MySQL. Deberás agregar las condiciones al WHERE por programación de modo de ir creando la consulta dinámicamente.
Yo lo hago en muchas ocasiones, pero lo hago en VB.Net, por lo que no sé si te servirán los ejemplos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 07/03/2011, 11:51
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: ayuda con esta consulta

Estoy utilizando PHP, hay posibilidad de hacerle condiciones (IF) en la consulta?

Porque la consulta por ahora solo la tengo asi:

Código MySQL:
Ver original
  1. $qry = "SELECT i.COD_INM,i.DES_INM, i.VAL_INM, i.ARE_INM, i.NUM_HAB_INM, i.NUM_BAN_INM, i.NUM_GAR_INM, i.EST_SOC_INM, m.NOM_MUN, ti.NOM_TIP_INM, z.NOM_ZON
  2. FROM (
  3. inmuebles i
  4. INNER JOIN municipios m
  5. USING ( COD_MUN )
  6. )
  7. INNER JOIN tipo_inmueble ti
  8. USING ( COD_TIP_INM )
  9. INNER JOIN zonas z
  10. USING ( COD_ZON )
  11. WHERE ti.COD_TIP_INM = ".$tipo_inmueble."
  12. or m.COD_MUN = ".$municipio." or z.COD_ZON = ".$zona."

Tienes algun ejemplo claro de como funcionan los condicionales o ciclos en SQL?

De todos modos agradezco los ejemplos, tambien le cacharreo al .NET, solo que hasta ahora me sale esta situacion...Muchas gracias

Etiquetas: Ninguno
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 20:14.