Ранжирование на основе характеристик продукта

У меня есть следующие таблицы в mysql база данных:

  1. товары

    • Код товара
    • наименование товара
    • product_catagory_id_fk
  2. product_features

    • feature_id
    • product_id_fk
    • FEATURE_NAME

Мне нужно добавить ранжирование продуктов в зависимости от их функций,

Рейтинг будет начинаться с 1 до 100, например, в зависимости от характеристик продукта,

Присваивая каждой функции "вес" и определяя общую "оценку" продукта как сумму его компонентов,

Вес будет одним из способов достижения этого,

В конце концов он будет использоваться для сравнения продуктов в той же категории,

Можете ли вы предложить следующее:

  • Какие новые таблицы мне нужно добавить
  • Какие столбцы мне нужно добавить в существующие таблицы
  • Как рассчитать рейтинг для привязки к таблицам

Вся помощь будет оценена

2 ответа

  1. Дайте каждой функции вес:

    ALTER TABLE product_features ADD COLUMN weight INT;
    UPDATE product_features SET weight = ? WHERE feature_id = ?; -- and repeat
    
  2. Выберите продукты (объединенные с их функциями и затем сгруппированные), отсортированные по общему количеству баллов:

    SELECT   p.*, SUM(f.weight) AS score
    FROM     products p
        JOIN product_features f ON f.product_id_fk = p.product_id
    GROUP BY p.product_id
    ORDER BY score DESC
    
  3. Или получить звание конкретного товара:

    SELECT 1+COUNT(*) AS rank FROM (
      SELECT   NULL
      FROM     product_features
      GROUP BY product_id_fk
      HAVING   SUM(weight) > (
                 SELECT SUM(weight)
                 FROM   product_features
                 WHERE  product_id_fk = ?   -- your product_id here
               )
    ) t
    

Прежде всего, вам нужно создать отдельную таблицу для объектов с соответствующим весом, например, у Small есть вес 1, у Medium вес 2, у Large вес 3 и так далее.

Так что теперь таблица функций будет что-то вроде

features
  - feature_id
  - feature_name
  - feature_weight

Создать отдельную таблицу для product_feature_associations

product_feature_associations
  - product_id_fk
  - feature_id_fk

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

Другие вопросы по тегам