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

[SOLUCIONADO] Consulta con if

Estas en el tema de Consulta con if en el foro de Mysql en Foros del Web. Buenas os dejo la consulta que quiero condicionar para ver si tiene solución o tengo que hacerlo a base de varias consultas. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 04/04/2013, 06:05
Avatar de javicruzgv  
Fecha de Ingreso: diciembre-2011
Ubicación: Alcoy(Alicante)
Mensajes: 189
Antigüedad: 12 años, 3 meses
Puntos: 2
Consulta con if

Buenas os dejo la consulta que quiero condicionar para ver si tiene solución o tengo que hacerlo a base de varias consultas.
Código MySQL:
Ver original
  1. SELECT comunidades.id_comunidad AS id_com, comunidades.nom_comunidad AS nombre, comunidades.id_usuario AS id_usuario, provincias.nom_provincia AS provincia, categorias.nom_categoria AS categoria
  2. FROM comunidades, provincias, categorias
  3. WHERE comunidades.id_provincia=provincias.id_provincia AND comunidades.id_categoria=categorias.id_categoria

Esta es la consulta. Las condiciones son las siguientes.
si comunidades.id_provincia=0 querria que me devolviese el campo provincia vacio.
si comunidad.id_cateogira=0 querria que me devolviese el campo categoria vacio.

Se que seria mas facil separarlo y no relacionar las tablas en las consulta. Pero me corroe la curiosidad por saber si se puede hacer.
__________________
http://www.cruzpyd.com

Última edición por gnzsoloyo; 04/04/2013 a las 06:52 Razón: sql sin etiquetar
  #2 (permalink)  
Antiguo 04/04/2013, 07:15
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: Consulta con if

Hay algunas consideraciones a tu problema:
- Si estás relacionando esas tablas así, es porque en Comunidades están las FK de las otras dos (Provincias y Categorías), pero si eso fuese cierto entonces jamás podrías tener un valor cero (0) en esos campos, a menos que hubiese en esas tablas un valor cero como PK (cosa bastante extraña).
- Si existe un registro cero, bien podrías resolver el problema poniendo un caracter vacío en ese registro y asunto terminado (es una forma de forzar la solución).
- Si no existe un registro cero, esa consulta no te debería devolver registros donde no haya relaciones entre las tres tablas.
- Si Comunidades te acepta un cero en esos campos, y no existe registro con ID cero en tus tablas referidas, entonces estás usando tablas MyISAM y no InnoDB, o al menos no estás declarando las FK, con lo que la integridad que tienes es nula, y los resultados pueden ser catastróficos...

Ahora bien, es técnicamente posible hacer lo que pides, siempre y cuando no uses un JOIN implícito, sino un LEFT JOIN, pero eso en tu ejemplo tiene un problema fundamental: Tu relación es en estrella y no en cadena.
Una relación en estrella es cuando una tabla principal se conecta a otras secundarias, sin que estas secundarias se relacionen entre si.
B <-- A --> C
El problema es que el LEFT JOIN devuelve todo lo de la primera tabla (la de la izquierda) tenga o no relación con la de la derecha. Y como estarías intentando hacer lo mismo dos veces, existe la altísima probabilidad de que devuelva registros duplicados, ya que se generará un producto cartesiano.
Esto pasa porque en la tercera lugar de tomar para el cálculo la tabla derivada entre Comunidad y Provincia, estarías relacionando nuevamente Comunidad con Categorías, sin tener en cuenta el resultado del primer par, lo que sumaría registros de ambos segmentos.

En definitiva, es posible de hacer, pero la consulta es algo elaborada, pero antes sería bueno que verifiquemos:

- ¿Qué tipo de tablas usas?
- ¿Están creadas las FK?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 04/04/2013, 09:33
Avatar de javicruzgv  
Fecha de Ingreso: diciembre-2011
Ubicación: Alcoy(Alicante)
Mensajes: 189
Antigüedad: 12 años, 3 meses
Puntos: 2
Respuesta: Consulta con if

gnzsoloyo, te comento. En la tabla comunidades tengo almacenadas las claves principales de las otras dos tablas.
Lo de el resulatado 0 es pq cuando se crea la comunidad y no quiero que se relacione con ninguna de estas dos tablas le he puesto que almacenen 0 en vez de nulo y no quiero poner en provincias y categorias una clave 0 pq me va ha fastidiar todos las consultas que ya tengo hechas a estas tablas.
El problema lo tengo en que cuando hago la consulta solo me saca los campos en los que existe relación y no me saca los que no estan relacionados y mi idea es que me saque los relacionados y los que no estan relacionados. Me explico, si una comunidad no esta relacionada con provincia o con categoria no me sale evidentemente, pq en los criterios de la consulta es donde les creo la relación y al no estar relacionados no me los saca. ¿Como puedo decirle que si el campo en la tabla comunidades es 0 no busque la relación?
__________________
http://www.cruzpyd.com

Etiquetas: campo, select, 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 05:53.