10/01/2011, 04:02
|
| | | Fecha de Ingreso: septiembre-2010 Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 3 meses Puntos: 331 | |
Respuesta: ayuda sobre asignar orden de productos En principio te estás liando con el tema paginación, la paginación es una forma de desplegar los resultados pero esto no tiene nada que ver con las tablas o su estructura.
Tal y como lo planteas, te faltaría al menos una tabla, sería algo así:
Código:
CREATE DATABASE /*!32312 IF NOT EXISTS*/`muebles` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `muebles`;
/*Table structure for table `categorias` */
DROP TABLE IF EXISTS `categorias`;
CREATE TABLE `categorias` (
`id_categoria` INT(11) NOT NULL AUTO_INCREMENT,
`categoria_nombre` VARCHAR(128) DEFAULT NULL,
PRIMARY KEY (`id_categoria`)
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
/*Data for the table `categorias` */
INSERT INTO `categorias`(`id_categoria`,`categoria_nombre`) VALUES (1,'Cocina'),(2,'Living'),(3,'Baño');
/*Table structure for table `grupos` */
DROP TABLE IF EXISTS `grupos`;
CREATE TABLE `grupos` (
`id_grupo` INT(11) NOT NULL AUTO_INCREMENT,
`id_categoria` INT(11) DEFAULT NULL,
`grupo_nombre` VARCHAR(128) DEFAULT NULL,
PRIMARY KEY (`id_grupo`),
KEY `FK_grupos` (`id_categoria`),
CONSTRAINT `FK_grupos` FOREIGN KEY (`id_categoria`) REFERENCES `categorias` (`id_categoria`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=INNODB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
/*Data for the table `grupos` */
INSERT INTO `grupos`(`id_grupo`,`id_categoria`,`grupo_nombre`) VALUES (1,1,'Sillas'),(2,1,'Mesas'),(3,2,'Sofas'),(4,3,'Cristalería'),(5,3,'Mesas');
/*Table structure for table `productos` */
DROP TABLE IF EXISTS `productos`;
CREATE TABLE `productos` (
`id_producto` INT(11) NOT NULL AUTO_INCREMENT,
`id_grupo` INT(11) DEFAULT NULL,
`producto_orden` INT(11) DEFAULT NULL,
`producto_nombre` VARCHAR(128) DEFAULT NULL,
PRIMARY KEY (`id_producto`),
KEY `FK_productos` (`id_grupo`),
KEY `Orden` (`producto_orden`),
CONSTRAINT `FK_productos` FOREIGN KEY (`id_grupo`) REFERENCES `grupos` (`id_grupo`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
/*Data for the table `productos` */
INSERT INTO `productos`(`id_producto`,`id_grupo`,`producto_orden`,`producto_nombre`) VALUES (1,1,1,'Silla cocina rojo standard'),(2,1,2,'Silla cocina verde'),(3,2,3,'Mesa madera');
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
Esta estructura parece más adecuada a lo que planteas.
Cada producto pertenece a un grupo Sillas, Mesas, Accesorios, etc, y tiene un orden dentro de su grupo, lo cual te permite ordenar como quieras. Cada grupo pertenece a una categoría. Así, hay 2 niveles de agrupación / clasificación. Si insertas un producto con orden 5 y el orden 5 ya existe, entonces tienes que reindexar toda la tabla para mover todos los ordenes según corresponda. Esto se hace por código, por PHP no por MySQL.
Claro que esta es mi versión, no conozco el proyecto completo. A ver qué sale, 1 saludo |