En primer lugar, me disculpo por la longitud. Esto es un poco complicado (al menos para mí).Problema de estructura/manipulación de datos MySQL complicado
Antecedentes de la base de datos:
Tengo un productos, tabla de variables, y los precios. Los "productos" son la información principal con respecto a un producto (descripción, título, etc.). Los "precios" tienen información sobre cada precio (precio, costo, cantidad mínima requerida, costo de envío, etc.), ya que algunos productos pueden tener más de un precio (un widget de 10 "es un precio diferente que un widget de 12", por ejemplo) . Las "variables" son variaciones del producto que no cambian el precio, como el color, el tamaño, etc.
Inicialmente (cuando construí esta base de datos hace aproximadamente 7 años) tenía la información variable almacenada en el primer precio en una lista de precios para el mismo producto en un formato delimitado por tuberías (sí, lo sé, badbadbad). Esto funcionó en general, pero siempre hemos tenido un problema, donde algunas veces una variable no sería consistente entre todos los precios.
Por ejemplo, un Widget (producto) puede ser de 10 "o 12" y venderse por $ 10 y $ 20 (precios) respectivamente. Sin embargo, aunque el widget de 10 "puede estar disponible en azul y rojo (variables), el widget de 12" solo está disponible en rojo. Mejoramos este problema agregando una pequeña afirmación entre paréntesis en la variable incongruente como "Rojo (SOLAMENTE 10"). Este tipo de trabajo funciona, pero los clientes no siempre son tan inteligentes y dedican mucho tiempo a corregir errores cuando un cliente selecciona un widget de 12 "en rojo.
Desde entonces he recibido la tarea de modernizar la base de datos y he decidido poner las variables en su propia tabla y hacerlas más dinámicas y más fáciles de combinar con ciertos precios, así como mantener un inventario a prueba de errores (puede Imagina las pesadillas).
Mi primer paso fue escribir un procedimiento almacenado en mi prueba db (para cuando realice la conversión) para procesar todas las variables existentes en una nueva tabla variable (y tabla de etiquetas, pero eso no es realmente importante, no lo hago t pensar). Analicé efectivamente las variables y las enumeré con la identificación del producto correcta y la identificación del producto con la que inicialmente estaban asociadas en la tabla de variables. Sin embargo, me di cuenta de que esto es solo una parte del problema, ya que yo (al menos para la transformación inicial de la base de datos) quiero que cada variable aparezca como conectada a cada precio para un producto determinado.
Para hacer esto, he creado otra mesa, así:
tblvariablesprices variablepriceid | variableid | priceid | productid
que es una relación muchos-a-muchos con la tabla de variables.
Problemas:
Mi problema ahora es, no sé cómo crear las filas. Puedo crear una combinación de la izquierda en mis tablas de precios y variables para obtener (creo) todos los datos necesarios, simplemente no sé cómo pasarlo. My SQL es (MySQL 5.0):
SELECT p.priceid, p.productid, variableid, labelid
FROM tblprices p
LEFT JOIN tblvariables v ON p.priceid = v.priceid
ORDER BY productid, priceid
Esto me va a conseguir cada priceid y idproducto y cualesquiera identificadores de variables a juego y etiquetas. Esto es bueno en ciertos casos, como cuando tengo algo como:
priceid | productid | variableid | labelid 2 | 7 | 10 | 4 2 | 7 | 11 | 4 2 | 7 | 12 | 4 3 | 7 | (null) | (null) --- another price for product
porque ahora sé que tengo que crear un registro para priceid 2 y variableids 10, 11, 12, y luego también para priceid 3 para ese producto.Sin embargo, también tengo los resultados de esta base de datos para los productos con ninguna variable, productos con variables de un precio y múltiples, y los productos con múltiples precios y sin variables, por ejemplo:
priceid | productid | variableid | labelid 2 | 7 | 10 | 4 2 | 7 | 11 | 4 2 | 7 | 12 | 4 3 | 7 | (null) | (null) 4 | 8 | (null) | (null) --- 1 price no variables 5 | 9 | 13 | 5 --- mult vars, 1 price 5 | 9 | 14 | 5 5 | 9 | 15 | 6 5 | 9 | 16 | 6 6 | 10 | (null) | (null) --- mult price, no vars 7 | 10 | (null) | (null) 8 | 10 | (null) | (null)
Tomando el conjunto de datos anterior, quiero añadir entradas en mi mesa tblpricesvariables así:
variablepriceid | variableid | priceid | productid 1 | 10 | 2 | 7 2 | 11 | 2 | 7 3 | 12 | 2 | 7 4 | 10 | 3 | 7 5 | 11 | 3 | 7 6 | 12 | 3 | 7 7 | 13 | 5 | 9 8 | 14 | 5 | 9 9 | 15 | 5 | 9 10 | 16 | 5 | 9
tengo miles de registros a proceso, por lo que, obviamente, hacer esto de forma manual no es la respuesta. ¿Alguien puede al menos señalarme en la dirección correcta, si no viene con un sproc que podría manejar este tipo de operación? También me gustaría recibir cualquier comentario sobre cómo organizar y/o estructurar mejor estos datos.
Muchas gracias por leer todo esto y ayudarme.
mierda santa. esto es EXACTAMENTE lo que necesitaba (con algunas adiciones menores, por supuesto). wow amigo Guau. – Jason
Su bienvenida. La próxima vez, siga los consejos de Dean y agregue las sentencias CREATE e INSERT, ahorra tanto tiempo en la reproducción de la estructura de su base de datos. – chris
ah, vale, ya veo lo que dices. Lo siento. gracias por tomar mi problema aparentemente grande (para mí) y hacer que parezca un juego de niños. jeez – Jason