Во-первых, прошу прощения за объем. Это довольно сложно (по крайней мере, для меня).
Справочная информация о базе данных:
У меня есть таблица продуктов, переменных и цен. «Продукты» - это основная информация о продукте (описание, название и т. Д.). "Цены" содержат информацию о каждой цене (цена, стоимость, минимальное количество, стоимость доставки и т. Д.), Поскольку у некоторых продуктов может быть более одной цены (например, 10-дюймовый виджет - это цена, отличная от 12-дюймового). . " «Переменные» - это вариации продукта, которые не меняют цену, например цвет, размер и т. Д.
Изначально (когда я создавал эту базу данных около 7 лет назад) я хранил информацию о переменных в первой цене в списке. цен на один и тот же продукт в формате с разделителями (да, я знаю, badbadbad). В целом это сработало, но у нас всегда была проблема, когда иногда переменная не согласовывалась между всеми ценами .
Например, виджет (продукт) может быть размером 10 дюймов или 12 дюймов и продаваться за 10 и 20 долларов (цены) соответственно. Однако, хотя 10-дюймовый виджет может быть доступен в синем и красном цвете (переменные), 12 "виджет доступен только в красном цвете. Мы решили эту проблему, добавив небольшой оператор в скобках в неконгруэнтную переменную, например" Красный (ТОЛЬКО 10 ")". Такие работы, Я понял, что это только часть проблемы, так как я (по крайней мере, для первоначального преобразования базы данных) хочу, чтобы каждая переменная была указана как связанная с каждой ценой для данного продукта.
Для этого я создал другая таблица, например:
tblvariablesprices variablepriceid | variableid | priceid | productid
, которая представляет собой "многие ко многим" с таблицей переменных.
Проблемы:
Моя проблема в том, что я не знаю, как создавать строки. Я могу создать левое соединение в своих таблицах цен и переменных, чтобы получить (я думаю) все необходимые данные, я просто не знаю, как это пройти. Мой sql (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
Это даст мне все идентификаторы цены и продукта, а также все соответствующие идентификаторы переменных и меток. Это хорошо в определенных случаях, например, когда у меня есть что-то вроде:
priceid | productid | variableid | labelid 2 | 7 | 10 | 4 2 | 7 | 11 | 4 2 | 7 | 12 | 4 3 | 7 | (null) | (null) --- another price for product
, потому что теперь я знаю, что мне нужно создать запись для priceid 2 и variableids 10, 11, 12, а затем также для priceid 3 для этого продукта. Однако я также получаю результаты из этого набора данных для продуктов без переменных, продуктов с одной ценой и несколькими переменными, а также продуктов с несколькими ценами и без переменных, например:
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)
Взяв вышеуказанный набор данных, я хочу добавить записи в свой Таблица tblpricesvariables выглядит так:
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
Мне нужно обработать тысячи записей, поэтому очевидно, что делать это вручную - не выход. Может ли кто-нибудь хотя бы указать мне правильное направление, если не придумать sproc, который мог бы справиться с этим типом операций? Я также приветствовал бы любые комментарии о том, как лучше организовать и / или структурировать эти данные.
Большое спасибо за то, что прочитали все это и помогли мне.