导轨,按匹配标签的数量排序,然后按名称排序



>这就是我想做的:Listing通过TaggingsTag具有多对多关系。我想允许用户按title(列表)和name(零个或多个标签)搜索列表。我想首先按匹配标签数量最多的列表对结果数进行排序,然后按标题排序。

似乎这个问题以前已经做过了——它可能就像从 MySQL 匹配这个问题(按匹配的标签数量对具有匹配标签的项目进行排序)一样简单。但是,我根本不懂SQL知识,这就是我寻求帮助的原因。

更新:这是我想要的一个例子。

假设我有 3 个房源。

listing1有"幽默"、"有趣"和"搞笑"的标签。

listing2 = 2 有标签"有趣"、"愚蠢"和"愚蠢"。

listing3 = 3 有标签"有趣"、"愚蠢"和"愚蠢"。

listing4 = 4 具有"完全严重"标签。

如果我使用标签"有趣"和"愚蠢"进行搜索,我应该得到的是 listing2、listing3、listing1 和 listing4(暂时忽略标题)。

有趣的问题。我认为您可能必须使用一些SQL糖来执行此范围。

像这样:

Listing
  .joins("LEFT JOIN taggings ON taggings.listing_id = listings.id")
  .joins('LEFT JOIN tags ON tags.id = taggings.tag_id AND tags.name IN ("funny","silly")')
  .group(:id)
  .order("count(tags.id), name DESC")

这有帮助吗?

假设你想要一个纯 ActiveRecord 的解决方案,以免触及任何 SQL...

Listing.order("tags.count DESC, title")

在这种情况下,最好使用标签的计数器缓存来优化查询。

相关内容

  • 没有找到相关文章

最新更新