У меня есть таблица тегов содержимого для наших статей, и каждый тег имеет вес от 0 до 100 с целью достижения суммы веса тега каждой статьи примерно 100. Мы не проверяем это, поэтому потенциально статья может иметь меньшая или большая сумма.
Моя структура таблицы:
CREATE TABLE `article_tags` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`article_id` bigint(20) DEFAULT NULL,
`tag` varchar(20) DEFAULT NULL,
`weight` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Данные могут выглядеть так:
INSERT INTO `article_tags` (`article_id`, `tag, `weight`)
VALUES
(1, 'fun', 50),
(1, 'winter', 50),
(2, 'fun', 10),
(2, 'love', 10),
(2, 'summer', 80)
(3, 'fun', 40),
(3, 'love', 50),
(3, 'summer', 10),
Теперь я хотел бы найти все статьи, соответствующие заданному набору взвешенных тегов.
Допустим, у меня есть теги fun
75% и love
25%. Теперь я хочу найти статью, которая лучше всего соответствует этим тегам и упорядочить по этим подсчетам.
Я ожидаю, что статьи будут выставлены следующим образом:
- Статья 1: веселье 37,5%
- Статья 3: веселье 30%, любовь 12,5% = 32,5%
- Статья 2: веселье 7,5%, любовь 2,5% = 10%
Поскольку я оба принимая во внимание их article_tags
веса и принимая во внимание запрошенные веса для поиска тегов.
Можно ли этого достичь с помощью запроса MySQL?
ОБНОВЛЕНИЕ ПО МАТЕМАТИЧЕСКОМУ
Моя математика следующая: В моем примере показана 4-я статья:
INSERT INTO `article_tags` (`article_id`, `tag, `weight`)
VALUES
(4, 'fun', 75),
(4, 'love', 25)
Теперь, просматривая эту статью, я хочу найти статьи, связанные с этой 4-й статьей.
Итак, статья 1 соответствует fun
50%, но поскольку моя 4-я статья оценивает только fun
как 75%, я вычитаю вес статьи 1: 50 * 0.75 = 37.5
.
Может быть, для этот. Моя конечная цель - найти похожие статьи и при этом учитывать вес каждого тега.