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

Consulta a tabla de relaciones mysql

Estas en el tema de Consulta a tabla de relaciones mysql en el foro de Mysql en Foros del Web. Hola como estan estoy con un problema con una consulta, realmente de sql se lo basico. Estoy trabajando con php. El problema es este, tengo ...
  #1 (permalink)  
Antiguo 12/04/2012, 11:56
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 4
Antigüedad: 12 años
Puntos: 0
Consulta a tabla de relaciones mysql

Hola como estan estoy con un problema con una consulta, realmente de sql se lo basico. Estoy trabajando con php.

El problema es este, tengo un tabla de leyes con estos dos campos ley_id y ley_nombre. Y otra tabla de relaciones que se llama relacion, con los campos voz_id y voz_ley_id

En la tabla de leyes hay estos campos

ley_id ley_nombre
1 Ley1
2 Ley2

En la tabla relacion tengo esto

voz_id voz_ley_id
1 1
2 1
3 1
1 2
2 2

La ley 1 tiene como voces relacionadas la 1,2 y 3, y la ley 2 solo las voces 1 y 2

Estoy haciendo un buscador general en donde se puede buscar por voces, el problema es el siguiente, si busco por las voces 1, 2 y 3 me tiene que traer solo la ley 1 pero no la ley 2, y si busco las voces 1 y 2 me tiene que traer las dos leyes.

SELECT * FROM leyes INNER JOIN relacion ON relacion.voz_id = '1' AND relacion.voz_id = '2' AND relacion.voz_id = '3' AND relacion.ley_id = leyes.ley_id

Esa consulta no me funciona, no me devuelve nada, pero si cambio el AND por OR me trae las dos leyes.
Si alguien me puede dar una mano se lo agradeceria mucho.
  #2 (permalink)  
Antiguo 12/04/2012, 15:01
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta a tabla de relaciones mysql

Hola Dattar:

Veo que este es el primer mensaje que publicas, así es que antes que nada, Bienvenido al foro.

La consulta que planteas es típica en SQL, por lo que estoy seguro que podrías haber encontrado algún otro foro con una respuesta que te ayudara a resolverla... San Google también tiene muchas respuestas, sólo hay que saber preguntar .

Pasando a tu problema. Una manera de resolver esta consulta es con el operador COUNT() y la cláusula HAVING... checa este script:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM leyes;
  2. +--------+------------+
  3. | ley_id | ley_nombre |
  4. +--------+------------+
  5. |      1 | Ley1       |
  6. |      2 | Ley2       |
  7. +--------+------------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. mysql> SELECT * FROM relacion;
  11. +--------+------------+
  12. | voz_id | voz_ley_id |
  13. +--------+------------+
  14. |      1 |          1 |
  15. |      2 |          1 |
  16. |      3 |          1 |
  17. |      1 |          2 |
  18. |      2 |          2 |
  19. +--------+------------+
  20. 5 rows in set (0.00 sec)
  21.  
  22. mysql> SELECT * FROM leyes L INNER JOIN (
  23.     -> SELECT voz_ley_id, COUNT(voz_ley_id)
  24.     -> FROM relacion WHERE voz_id IN (1,2)
  25.     -> GROUP BY voz_ley_id
  26.     -> HAVING COUNT(voz_ley_id) >= 2
  27.     -> ) T ON L.ley_id = T.voz_ley_id;
  28. +--------+------------+------------+-------------------+
  29. | ley_id | ley_nombre | voz_ley_id | COUNT(voz_ley_id) |
  30. +--------+------------+------------+-------------------+
  31. |      1 | Ley1       |          1 |                 2 |
  32. |      2 | Ley2       |          2 |                 2 |
  33. +--------+------------+------------+-------------------+
  34. 2 rows in set (0.00 sec)
  35.  
  36. mysql> SELECT * FROM leyes L INNER JOIN (
  37.     -> SELECT voz_ley_id, COUNT(voz_ley_id)
  38.     -> FROM relacion WHERE voz_id IN (1,2,3)
  39.     -> GROUP BY voz_ley_id
  40.     -> HAVING COUNT(voz_ley_id) >= 3
  41.     -> ) T ON L.ley_id = T.voz_ley_id;
  42. +--------+------------+------------+-------------------+
  43. | ley_id | ley_nombre | voz_ley_id | COUNT(voz_ley_id) |
  44. +--------+------------+------------+-------------------+
  45. |      1 | Ley1       |          1 |                 3 |
  46. +--------+------------+------------+-------------------+
  47. 1 row in set (0.05 sec)

La única diferencia entre las consultas es el contenido que se pone en el operador IN y el valor para comparar en el HAVING, En el primer caso se consideran sólo las voces 1 y 2, mientras que en la segunda consulta se incluye también la voz 3... dale un vistazo y si tienes alguna duda lo comentas en el foro.

Saludos
Leo.
  #3 (permalink)  
Antiguo 12/04/2012, 16:58
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 4
Antigüedad: 12 años
Puntos: 0
Respuesta: Consulta a tabla de relaciones mysql

Increible... sin palabras.
Muchisimas gracias.

Etiquetas: relacion, relaciones
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 19:59.