Ver Mensaje Individual
  #4 (permalink)  
Antiguo 10/01/2011, 04:02
Avatar de repara2
repara2
 
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 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