gpt4 book ai didi

php - MYSQL与多个WHERE获得最接近的匹配

转载 作者:可可西里 更新时间:2023-11-01 08:00:30 25 4
gpt4 key购买 nike

在我的数据库中,我有一个包含产品的表和另一个包含与每个产品相关联的标签的表。

当用户查看产品页面时,我想显示与他正在查看的产品最“相关”(或最接近)的产品。

假设产品标有 5 个不同的标签。我想获得具有相同 5 个标签的产品,然后是具有相同 5 个标签中的 4 个的产品,然后是具有相同 5 个标签中的 3 个的产品,等等......

要做到这一点,我猜我必须创建一个或多个 MYSQL 查询,但我什至不知道从哪里开始。

匹配相同的 5 个标签很容易,我可以只使用 WHERE tag='?' AND tag='?'...但是我怎样才能得到另一个 (4/5, 3/5, 2/5, 1/5)?

如有任何帮助,我们将不胜感激!

干杯史蒂文


编辑

@Orbits:我的标签都在不同的行上……如果不是,我可能会进行文本匹配,但情况就是这样。标签行由 (id, tag, product_id) 组成

@cusimar9:不同的表,如帖子中所述:P

@vbence:我相信它尽可能简单..这是......但我没有连接表

产品:

CREATE TABLE `products` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
...
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

标签:

CREATE TABLE `tags` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` varchar(70) NOT NULL,
`product_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=116 ;

最佳答案

当然,字符串文字 'Tag1' 等必须替换为您的标签。

SELECT products.id, COUNT(tags.id) AS match_level
FROM products
LEFT JOIN tags ON tags.product_id = product.id
WHERE tags.type IN ('Tag1', 'Tag2', 'Tag3', 'Tag4', 'Tag5')
GROUP BY products.id
ORDER BY match_level DESC

如果您还没有这样的索引,请将其添加到您的 tags 表中。没有索引,您就是在浪费资源。好时光。

CREATE INDEX multimatch ON tags (type, product_id);

关于php - MYSQL与多个WHERE获得最接近的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5195264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com