Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/07/2013, 15:02
max_mouse699
 
Fecha de Ingreso: abril-2011
Mensajes: 66
Antigüedad: 13 años
Puntos: 7
Consulta multiple a una tabla

Hola Comunidad.

Les pongo el siguiente preambulo al caso para que puedan comprender:

tengo 3 tablas.

tabla etiquetas
tabla etiquetas_elementos
tabla elementos.

hasta ahi todo bien, pero ahora viene la cumbia, algunos datos:

Código MySQL:
Ver original
  1. -- phpMyAdmin SQL Dump
  2. -- version 3.4.5deb1
  3. -- http://www.phpmyadmin.net
  4. --
  5. -- Servidor: localhost
  6. -- Tiempo de generación: 15-07-2013 a las 16:42:52
  7. -- Versión del servidor: 5.1.67
  8. -- Versión de PHP: 5.3.6-13ubuntu3.9
  9.  
  10. SET FOREIGN_KEY_CHECKS=0;
  11. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  12. SET time_zone = "+00:00";
  13.  
  14. --
  15. -- Base de datos: `test`
  16. --
  17.  
  18. -- --------------------------------------------------------
  19.  
  20. --
  21. -- Estructura de tabla para la tabla `elementos`
  22. --
  23.  
  24. CREATE TABLE IF NOT EXISTS `elementos` (
  25.   `id_interno` int(10) unsigned NOT NULL AUTO_INCREMENT,
  26.   `nombre_elemento` varchar(255) COLLATE utf8_spanish_ci DEFAULT NULL,
  27.   `descripcion_elemento` varchar(255) COLLATE utf8_spanish_ci DEFAULT NULL,
  28.   PRIMARY KEY (`id_interno`)
  29. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=5 ;
  30.  
  31. --
  32. -- Volcado de datos para la tabla `elementos`
  33. --
  34.  
  35. INSERT INTO `elementos` (`id_interno`, `nombre_elemento`, `descripcion_elemento`) VALUES
  36. (1, 'teclado', 'teclado de computador'),
  37. (2, 'mesa comedor', 'mesa cuadrada de 4 asientos'),
  38. (3, 'silla comedor', 'silla color cafe'),
  39. (4, 'set cuchillos', 'cuchillos de cocina');
  40.  
  41. -- --------------------------------------------------------
  42.  
  43. --
  44. -- Estructura de tabla para la tabla `etiquetas`
  45. --
  46.  
  47. CREATE TABLE IF NOT EXISTS `etiquetas` (
  48.   `id_interno` int(10) unsigned NOT NULL AUTO_INCREMENT,
  49.   `descripcion` varchar(255) COLLATE utf8_spanish_ci DEFAULT NULL,
  50.   PRIMARY KEY (`id_interno`)
  51. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=6 ;
  52.  
  53. --
  54. -- Volcado de datos para la tabla `etiquetas`
  55. --
  56.  
  57. INSERT INTO `etiquetas` (`id_interno`, `descripcion`) VALUES
  58. (1, 'COMEDOR'),
  59. (2, 'LIVING'),
  60. (3, 'BANO'),
  61. (4, 'COCINA'),
  62. (5, 'DORMITORIO');
  63.  
  64. -- --------------------------------------------------------
  65.  
  66. --
  67. -- Estructura de tabla para la tabla `etiqueta_elemento`
  68. --
  69.  
  70. CREATE TABLE IF NOT EXISTS `etiqueta_elemento` (
  71.   `id_interno` int(10) unsigned NOT NULL AUTO_INCREMENT,
  72.   `id_elemento` int(10) unsigned DEFAULT NULL,
  73.   `id_etiqueta` int(10) unsigned DEFAULT NULL,
  74.   PRIMARY KEY (`id_interno`)
  75. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=7 ;
  76.  
  77. --
  78. -- Volcado de datos para la tabla `etiqueta_elemento`
  79. --
  80.  
  81. INSERT INTO `etiqueta_elemento` (`id_interno`, `id_elemento`, `id_etiqueta`) VALUES
  82. (1, 1, 2),
  83. (2, 1, 5),
  84. (3, 2, 4),
  85. (4, 3, 4),
  86. (5, 2, 2);
  87. SET FOREIGN_KEY_CHECKS=1;

La idea es que de acuerdo a los datos publicados, la consulta sea capaz de obtenerme el(los) elementos que contengan la(las) etiquetas que yo especifique.

Estuve probando con lo siguiente, pero al parecer no me funciono.

Código MySQL:
Ver original
  1. *
  2. FROM etiquetas_elementos ee
  3. LEFT JOIN etiquetas eti ON eti.id_interno = ee.id_etiqueta
  4. LEFT JOIN elementos e ON e.id_interno = ee.id_elemento
  5. eti.descripcion = 'COCINA' AND eti.descripcion = 'LIVING'
  6.  
  7. //tambien habia probado con IN
  8.  
  9. .....
  10. eti.descripcion IN ('COCINA' ,'LIVING')

Nota: este ejemplo es solo para explicar el funcionamiento del problema que tengo, pero no es que tenga asi las bases de datos en realidad.

Si alguien aporta alguna idea, se lo agradezco.