Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/07/2013, 15:44
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Consulta multiple a una tabla

Hola max_mouse699:

Este tipo de consultas es bastante común y lo hemos respondido muchas veces en el foro, hay varias formas de hacerlo, la más común es con GROUP BY y HAVING:

Observa el ejemplo:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM etiquetas;
  2. +------------+-------------+
  3. | id_interno | descripcion |
  4. +------------+-------------+
  5. |          1 | COMEDOR     |
  6. |          2 | LIVING      |
  7. |          3 | BANO        |
  8. |          4 | COCINA      |
  9. |          5 | DORMITORIO  |
  10. +------------+-------------+
  11. 5 rows in set (0.00 sec)
  12.  
  13. mysql> SELECT * FROM etiqueta_elemento;
  14. +------------+-------------+-------------+
  15. | id_interno | id_elemento | id_etiqueta |
  16. +------------+-------------+-------------+
  17. |          1 |           1 |           2 |
  18. |          2 |           1 |           5 |
  19. |          3 |           2 |           4 |
  20. |          4 |           3 |           4 |
  21. |          5 |           2 |           2 |
  22. +------------+-------------+-------------+
  23. 5 rows in set (0.00 sec)

Puedes poner una condición WHERE para filtrar las características que te interesan utilizar la función COUNT para saber cuántas características tiene cada grupo, es decir, algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT id_elemento, COUNT(*) total
  2.     -> FROM etiqueta_elemento EE
  3.     -> INNER JOIN etiquetas E ON EE.id_etiqueta = E.id_interno
  4.     -> WHERE e.descripcion IN ('COCINA' ,'LIVING')
  5.     -> GROUP BY id_elemento;
  6. +-------------+-------+
  7. | id_elemento | total |
  8. +-------------+-------+
  9. |           1 |     1 |
  10. |           2 |     2 |
  11. |           3 |     1 |
  12. +-------------+-------+
  13. 3 rows in set (0.00 sec)

de esta consulta se desprende que el id_elemento = 1 sólo tiene uno de las dos características (LIVING), el id_elemento = 2 tiene las dos características (COCINA, LIVING) y el id_elemento = 3 tiene una sola (COCINA)... por lo tanto sólo el id_elemento = cumple con ambas características a la vez... lo único que tienes que hacer es agregar la cláusula HAVING al final de la consulta:

Código MySQL:
Ver original
  1. mysql> SELECT id_elemento, COUNT(*) total
  2.     -> FROM etiqueta_elemento EE
  3.     -> INNER JOIN etiquetas E ON EE.id_etiqueta = E.id_interno
  4.     -> WHERE e.descripcion IN ('COCINA' ,'LIVING')
  5.     -> GROUP BY id_elemento
  6.     -> HAVING COUNT(*) = 2;
  7. +-------------+-------+
  8. | id_elemento | total |
  9. +-------------+-------+
  10. |           2 |     2 |
  11. +-------------+-------+
  12. 1 row in set (0.00 sec)

Con esta consulta puedes filtrar la información que necesites.

Haz la prueba, utiliza la herramienta de búsqueda del foro para encontrar otros post semejantes, si continuas con problemas postea algo de lo que intentaste hacer y con gusto te ayudamos a afinar la consulta.

Saludos
Leo.