Ver Mensaje Individual
  #5 (permalink)  
Antiguo 25/09/2013, 13:06
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema consulta

Hola el_javi:

Este tipo de consultas son de las que te debes aprender desde que comienzas a estudiar SQL... hay muchísimos ejemplos en la red y en este mismo foro hemos tratado infinidad de veces estas consultas, te pongo un ejemplo "genérico" para que lo adaptes a tus tablas y tus datos. Supongamos que tenemos las siguientes tablas:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM restaurantes;
  2. +---------+--------------------+
  3. | id_rest | nombre_rest        |
  4. +---------+--------------------+
  5. |       1 | restaurante uno    |
  6. |       2 | restaurante dos    |
  7. |       3 | restaurante tres   |
  8. |       4 | restaurante cuatro |
  9. +---------+--------------------+
  10. 4 rows IN SET (0.16 sec)
  11.  
  12. mysql> SELECT * FROM servicios;
  13. +---------+---------------+
  14. | id_serv | nombre_serv   |
  15. +---------+---------------+
  16. |       1 | aparcacoches  |
  17. |       2 | guarderia     |
  18. |       3 | otro servicio |
  19. +---------+---------------+
  20. 3 rows IN SET (0.00 sec)
  21.  
  22. mysql> SELECT * FROM restaurantes_servicios;
  23. +--------------+---------+---------+
  24. | id_rest_serv | id_rest | id_serv |
  25. +--------------+---------+---------+
  26. |            1 |       1 |       1 |
  27. |            2 |       2 |       2 |
  28. |            3 |       3 |       1 |
  29. |            4 |       3 |       2 |
  30. |            5 |       4 |       1 |
  31. |            6 |       4 |       3 |
  32. +--------------+---------+---------+
  33. 6 rows IN SET (0.00 sec)

Observa que cada restauran tiene uno o varios servicios... supongamos que te interesa saber aquellos restaurantes que cuenta con dos servicios en especial (aparcacoches y guardería). Observa que los restaurantes UNO y DOS tienen alguno de los servicios que tú necesitas, el restaurant TRES tiene ambos, y aunque el restaurante CUATRO tiene dos servicios SÓLO TIENE UNO DE LOS QUE TE INTERESAN. podrías hacer una consulta así:

Código MySQL:
Ver original
  1. mysql> SELECT id_rest, COUNT(DISTINCT id_serv)
  2.     -> FROM restaurantes_servicios WHERE id_serv IN (1, 2)
  3.     -> GROUP BY id_rest;
  4. +---------+-------------------------+
  5. | id_rest | COUNT(DISTINCT id_serv) |
  6. +---------+-------------------------+
  7. |       1 |                       1 |
  8. |       2 |                       1 |
  9. |       3 |                       2 |
  10. |       4 |                       1 |
  11. +---------+-------------------------+
  12. 4 rows IN SET (0.00 sec)

Observa que esta consulta te da el TOTAL DE SERVICIOS QUE TE INTERESA que tiene cada restaurant... OBSERVA QUE SÓLO EL RESTAURANT TRES tiene ambos servicios... agregando un HAVING COUNT() podrías filtrar aquellos que tengan ambos servicios:

Código MySQL:
Ver original
  1. mysql> SELECT id_rest
  2.     -> FROM restaurantes_servicios WHERE id_serv IN (1, 2)
  3.     -> GROUP BY id_rest
  4.     -> HAVING COUNT(DISTINCT id_serv) = 2;
  5. +---------+
  6. | id_rest |
  7. +---------+
  8. |       3 |
  9. +---------+
  10. 1 row IN SET (0.00 sec)

Con esta información puedes filtar los registros que te interesan...

haz la prueba, y si continuas con problemas postea algo de lo que intentaste hacer y con gusto te ayudamos a corregir la consulta.

saludos
Leo.