2015-06-15 3 views
1

При перечислении продукта в каталоге каждый продукт имеет несколько общих атрибутов, таких как mrp, цена, sku, описание продукта и т. Д. И т. Д., Что применимо ко всем.Добавление атрибутов продукта

Но есть несколько атрибутов, которые специфичны для продукта, например, футболки могут иметь цвет и размер, у ноутбуков есть память, разрешение, скорость процессора, мобильные телефоны могут иметь память, разрешение камеры и операционную систему.

Каждый из вышеперечисленных атрибутов в примере является специфичным для продукта и важным.

Принимая реплику электронной коммерции, я верю, что я скопировал их базу данных с несколькими изменениями (в соответствии с моими потребностями), и вот она.

Продукты

enter image description here

Идея заключается в том, чтобы записать информацию о продукте/атрибут (который применим ко всем, как описано в первом абзаце) в таблицу продуктов в таблице продуктов.

enter image description here

Атрибуты

enter image description here

Затем идет таблица атрибутов, где мы храним ATTRIBUTENAME, например, разрешение, память, цвет, размер, скорость процессора и т.д. и т.п.

enter image description here

Product_Attribute

enter image description here

Это таблица, где мы сохраняем ProductID таблицы продуктов, attributeId таблицы атрибутов и значение атрибута AttributeValue например. разрешение = 15000пикселей (attributeValue), memory = 500gb (attributeValue), color = blue (attributeValue).

enter image description here

До сих пор у нас есть все три таблицы с записями, которые теперь должны отображаться на странице продукта подробно несколько, как этот

enter image description here

OpenCart, если не ошибаюсь, использует левый join, чтобы объединить свой продукт, атрибут и product_attribute, чтобы отображать продукт на страницах подробностей продукта, и это то, что мне нужно сделать.

Как использовать левый оператор объединения для отображения продукта, атрибута и product_attribute для отображения продуктов и их атрибутов? Обратите внимание, что может быть несколько продуктов, которые не требуют дополнительного атрибута.

+0

Вы можете легко выполнить эту задачу, объединив PHP и SQL, но я не знаю, действительно ли это можно сделать только через SQL или нет. –

+0

@AbdoAdel, это в php, и я думаю, что я почти готов, нужно проверить решение и плохой пост, мой ответ здесь как можно скорее –

ответ

0

К сожалению, полная рекурсия с левым соединением является одной из вещей, в которой SQL не очень хорош. На самом деле, я уверен, что это невозможно, по крайней мере, в стандартном SQL.

Достойной альтернативой является использование простого наследования путем использования вашей основной «таблицы продуктов» в качестве базового класса и расширения других типов таблиц (таких как «сотовый телефон» или «футболка»). Расширение, в этом случае, может быть легко выполнено, имея разные новые таблицы и все они имеют внешний ключ к таблице продуктов.

Тогда, если у вас нет способа различать тип продукта в вашей таблице продуктов, добавьте атрибут «вид» или «тип», а в вашем приложении выполните левое соединение на основе этого атрибута, где это необходимо ,

+0

, но я вижу, что opencart это делает, –

Смежные вопросы