通过搜索最大号码的其他物品来查找相关物品。类似的标签

时间:2016-04-04 23:09:25

标签: mysql ruby-on-rails database

我正在使用标记系统对项目进行分组。基本上我将一些标签添加到项目中然后我可以通过在数据库中搜索包含部分或全部标签的其他项目来查找与其类似的项目,然后按每个项目的最大标签数量排序结果。这里有一些伪代码:

    product: id, name, description
    tags: id, name
    product_tags: id, product_id, tag_id


    map = new Map<int product_id, int occurances>
    loop product_tags.where(tag_id: [1,2,3]) as |ptag|
        map[ptag.product_id]++
    end
    sort map by max occurrences
    return map.top(6)

我的问题是;如何创建单个mysql查询来执行此任务?我也愿意采用其他方法来实现这一目标。

1 个答案:

答案 0 :(得分:0)

您想要产品ID吗?

我会选择这样的东西:

product_ids = ProductTag
             .joins("INNER JOIN product ON products.id = product_tags.product_id")
             .where("tag_id IN (?)", [1,2,3])
             .select("product_id, count(product_id) as product_count")
             .group("product_id")
             .order("product_count DESC")
             .limit(6)
             .map(&:product_id)

然后,如果您需要产品,可以这样做:

Product.find(product_ids)