Ver Mensaje Individual
  #4 (permalink)  
Antiguo 08/07/2003, 08:47
josemi
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

A mi se me ocurren dos soluciones. Una es usar una tabla para almacenar las categorias madre y otra tabla que almacene las hijas. La otra es guardar todas las categorias en una sola tabla creando una especie de arbol. Dependiendo del tipo de consultas que vayas a hacer, te sera mas util una u otra.

1.- Dos tablas:

Tabla: Categorias_madre (ID_madre (clave primaria),Nombre_categoria)
Tabla: Categorias_hija (ID_hija (clave primaria),Nombre_categoria,ID_madre)

Ej:

Categorias_madre
-----------------------
ID_madre----Texto
-----------------------
1---------------Videojuegos
2---------------Actualizaciones
3---------------Afiliados

Categorias_hija
--------------------
ID_hija--Texto-------ID_madre
-------------------------------
1---------PS2---------1
2---------GC----------1
3---------articulos---2
4---------afiliado1---3


ID_madre en Categorias_hija es la clave foranea que relaciona ambas tablas, almacena el ID_madre de Categorias_madre que corresponda. Para sacar las categorias hijas de determinada categoria madre, sabiendo el ID_madre es simplemente:

SELECT * FROM Categorias_hija WHERE ID_madre='laID'

Inconveniente metodo 1: Si quieres crear un nivel mas de categorias deberias crear otra tabla (Subcategorias, por ejemplo).

2.- Una sola tabla:

Tabla: Categorias (ID (clave primaria), Texto, ID_madre)

Ej:

Categorias
--------------------
ID--Texto--------------ID_madre
--------------------------------------
1---Videojuegos------0
2---Actualizaciones--0
3---Afiliados-----------0
4---PS2----------------1
5---GC-----------------1
6---articulos----------2
7---afiliado1----------3


En este caso tenemos todas las categorias tanto las madres como las hijas. Se distingen porque las madres tendan en ID_madre el valor 0, mientras que las hijas tendran el valor del ID de la categoria madre. La consulta seria similar (igual cambiando el nombre de la tabla).

Ventaja del metodo 2: que puedes crear sin problemas otro nivel de categoria, por ejemplo una subcategoria de Actualizaciones-Articulos simplemente poniendo en ID_madre el ID de Articulos.
Inconveniente del metodo 2: Se dificulta su manejo con consultas complejas.

Espero haber sido de ayuda.

PD: ¿No deberia ir en el foro de Base de Datos? Ya que es un problema de estructura de la base de datos, no de como se accede desde PHP.

PD: Si quieres que las categorias pertenezcan a varias categorias madre, debes crear otra tabla que almacene esas multiples relaciones en lugar de almacenarlas en la misma tabla que las categorias.
__________________
Josemi

Aprendiz de mucho, maestro de poco.