elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Dilema de relación entre categorías y objetos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Dilema de relación entre categorías y objetos  (Leído 2,240 veces)
WHK
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.328


The Hacktivism is not a crime


Ver Perfil WWW
Dilema de relación entre categorías y objetos
« en: 5 Agosto 2011, 09:12 »

Holas, tengo un pequeño problema sin solucionar, quería ver si alguien me puede dar una mano porque no encuentro información al respecto en gg y no se si tendrá algún nombre o función específica que lo haga.

Tengo la tabla frutas
Tengo una tabla categorías
Tengo una tabla contenido de categorías

En categorías tengo hartas cosas como por ejemplo paises por donde ha pasado.

El problema es el siguiente:
La fruta puede llevar mas de una etiqueta, digamos 3 y que además pasó por 2 paises, asi que ya tengo 2 categorías con 5 items, el problema es como relaciono esto con la tabla de frutas para poder hacer una busqueda a futuro?

Pensé en agregar una columna por cáda categoría en la tabla de la fruta pero no me sirve porque un administrador puede sacar o agregar categorías
El problema es que puede tener varias categorías o ninguna.

Tampoco me sirve serializar las categorías o separarlas por comas porque después necesito hacer un filtro de busqueda por checkboxes y no puedo estar buscando con like '%,$id,%' porque es muy impreciso e incomodo.

Que pasa si deseo listar todas las frutas que tengan la estampa 1,2 y 3 y que hayan pasado por mexico y chile?

Que puedo hacer en éste caso?

Estructura:
Código
  1. CREATE TABLE IF NOT EXISTS `categorias` (
  2.  `id` INT(11) NOT NULL AUTO_INCREMENT,
  3.  `nombre` CHAR(255) NOT NULL,
  4.  PRIMARY KEY (`id`)
  5. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
  6.  
  7. --
  8. -- Volcar la base de datos para la tabla `categorias`
  9. --
  10.  
  11. INSERT INTO `categorias` (`id`, `nombre`) VALUES
  12. (1, 'paises_recorridos'),
  13. (2, 'estampas');
  14.  
  15. -- --------------------------------------------------------
  16.  
  17. --
  18. -- Estructura de tabla para la tabla `contenido_categorias`
  19. --
  20.  
  21. CREATE TABLE IF NOT EXISTS `contenido_categorias` (
  22.  `id` INT(11) NOT NULL AUTO_INCREMENT,
  23.  `id_categoria` INT(11) NOT NULL,
  24.  `nombre` CHAR(255) NOT NULL,
  25.  PRIMARY KEY (`id`)
  26. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
  27.  
  28. --
  29. -- Volcar la base de datos para la tabla `contenido_categorias`
  30. --
  31.  
  32. INSERT INTO `contenido_categorias` (`id`, `id_categoria`, `nombre`) VALUES
  33. (1, 1, 'Chile'),
  34. (2, 1, 'México'),
  35. (3, 1, 'Estados unidos'),
  36. (4, 1, 'Argentina'),
  37. (5, 2, 'Estampa de supermegacalidad'),
  38. (6, 2, 'Estampa de madurez alta'),
  39. (7, 2, 'Estampa sin fertilizante'),
  40. (8, 2, 'Estampa de brillo');
  41.  
  42. -- --------------------------------------------------------
  43.  
  44. --
  45. -- Estructura de tabla para la tabla `frutas`
  46. --
  47.  
  48. CREATE TABLE IF NOT EXISTS `frutas` (
  49.  `id` INT(11) NOT NULL AUTO_INCREMENT,
  50.  `nombre` VARCHAR(255) NOT NULL,
  51.  PRIMARY KEY (`id`)
  52. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
  53.  
  54. --
  55. -- Volcar la base de datos para la tabla `frutas`
  56. --
  57.  
  58. INSERT INTO `frutas` (`id`, `nombre`) VALUES
  59. (1, 'Pera'),
  60. (2, 'Manzana'),
  61. (3, 'Kiwi'),
  62. (4, 'Plátano');
  63.  

Claro que no lo quiero para frutas ni paises xD es solo un ejemplo de lo que quiero hacer con otros datos y tags con categorías de tags.

Creo haber visto esto en wordpress, mientras tanto le daré un vistazo al código fuente.

Edito:------------------------------------
Ya vi wordpress y lo que hace es crear dos tablas nuevas con relación de datos:
Código:
Estructura term_relationships
Estructura term_taxonomy

Habrá algo más cómodo y rápido que hacer una tabla como pasarela de relaciones?


« Última modificación: 5 Agosto 2011, 09:16 por WHK » En línea

Telegram: @WHK102 - Semáforo Epidemiologico Chile
Novlucker
Ninja y
Moderador Global
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Dilema de relación entre categorías y objetos
« Respuesta #1 en: 5 Agosto 2011, 14:44 »

La verdad que ahora no se me ocurre otra manera de la que comentas, porque dado que tienes todos los contenidos de categorias en una única tabla y a su vez quieres subdividir la búsqueda, o bien tienes una tabla intermedia, o bien tienes tablas para cada grupo de contenido de categoría, vease una tabla para paises, una para estampas, etc. :-\

Saludos


En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Nakp
casi es
Ex-Staff
*
Desconectado Desconectado

Mensajes: 6.336

he vuelto :)


Ver Perfil WWW
Re: Dilema de relación entre categorías y objetos
« Respuesta #2 en: 8 Agosto 2011, 03:03 »

solo necesitas una tabla para registrar que tal fruta esta asociada a tal "contenido de categoria", suponiendo que una pera paso por chile y por méxico, y además tiene la estampa de madurez alta, el registro tendria algo como

id_frutaid_contenido_categoria
11
12
15

ahora, la consulta esta un poco mas pensada (talvez el diseño de la bbdd sea el malo :P) pero tendrías que hacer algo como

Código
  1. SELECT id_fruta FROM relaciones WHERE id_contenido_categoria IN(1,2,5) GROUP BY id_fruta HAVING COUNT(DISTINCT id_contenido_categoria) = 3

donde el count sea igual al numero de categorias que deseas incluir :P
En línea

Ojo por ojo, y el mundo acabará ciego.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines