Селектор функций продукта с использованием MySQL - PullRequest
0 голосов
/ 27 июня 2011

Как вы видите ниже, продукт (id 100) связан с вариантами Man , S и M .

Таблица характеристик:

 feature_id      name
------------  ----------
     1          Gender
     2           Size

Таблица вариантов исполнения:

 variant_id      feature_id        name
------------    -------------    --------
     1                1             Man
     2                1            Woman
     3                2              S
     4                2              M
     5                2              L

Таблица характеристик продукта:

 product_id      feature_id        variant_id
------------    -------------     ------------
    100               1                1
    100               2                3
    100               2                4

Как мне связать эти три варианта с продуктом с помощью команды MySQL? Я действительно этого не делал.

Ответы [ 2 ]

1 голос
/ 27 июня 2011

Вы не показали таблицу 'product', но я предполагаю, что она есть.

SELECT * FROM product p INNER JOIN product_feature_relation rel ON p.product_id = rel.product_id INNER JOIN feature_variants fv ON rel.variant_id = fv.variant_id INNER JOIN features f ON fv.feature_id = f.feature_id

Скорее всего, результаты, которые даст этот запрос, могут оказаться бесполезными, если вы собираетесь выполнять итерации и действовать немедленно. Было бы лучше иметь 2 строки, представляющие уникальные размеры, а не три (2 размера + пол) - но вы не указали это в вопросе, поэтому я не уверен, что вам это нужно.

1 голос
/ 27 июня 2011

Во-первых, вы повторяете некоторую информацию без необходимости. Вам не нужен feature_id в таблице соотношения функций продукта. Это может прийти из вашей таблицы вариантов функций. Если вы добавляете новые атрибуты продукта, вам придется продублировать эту информацию. Также вы можете попасть в противоречивое состояние. Если в некоторых ваших отчетах используется идентификатор функции из одной таблицы, а в другой используется другая таблица, и вы забыли обновить один из них, у вас может быть отчет, который по-прежнему показывает неверную информацию.

Чтобы ответить на вопрос, вы просто объединяетесь за столами.

select pf.product_id, f.name, fv.name 
  from       productfeatures pf 
  inner join featurevariants fv   on pf.variant_id = fv.variant_id
  inner join features             on fv.feature_id = f.feature_id

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

надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...