如何在MariaDb/MySQL中按costum函数对选定的行进行排序?

qgelzfjb  于 2022-11-08  发布在  Mysql
关注(0)|答案(1)|浏览(144)

我有100000个产品和500个类别。每个产品是在10个类别。产品和类别是在多对多的关系。我想找到10个最相关的产品的类别。
例如产品

P1 is in 1,2,3,4,5 categories.
P2 is in 4,5,6,7,8 categories.
P3 is in 2,3,4,5,6 categories.

与P1最相关的产品是P3。因为它们在4个类别中很常见。我需要一个查询来获得10个与特定产品最相关的产品。
该查询是否会影响性能?

tyky79it

tyky79it1#

查询将为:

SELECT pother.id, count(*) as common
FROM product
JOIN category ON product.category = category.id
JOIN product pother ON pother.category = category.id
WHERE product.id = X
GROUP BY pother.id
ORDER BY common DEC LIMIT 10

如果product.category被索引,并且你把一个产品限制在10个类别,那么它可能不会太糟糕。
替代子查询表单

SELECT id, count(*) as common
FROM product
JOIN category
  ON product.category = category.id AND category.id IN (select category FROM product WHERE product.id = X)
GROUP BY id
ORDER BY comm DESC LIMIT 10

您可以将查询计划编辑到这个答案中吗?

相关问题