0

これが私がやりたいことです: throughListingと多対多の関係があります。ユーザーが(リストの) および(0 個以上のタグの) によってリストを検索できるようにしたいと考えています。検索結果の数を、一致するタグの数が最も多いリスト順、次にタイトル順に並べたいと思います。TagTaggingstitlename

この質問は以前に行われたようです-MySQLからこの質問(一致するタグの数で一致するタグを持つアイテムを注文する)に一致させるのと同じくらい簡単かもしれません。ただし、私は SQL の知識がまったくないので、助けを求めています。

更新: これは私が欲しいものの例です。

3 つのリストがあるとします。

listing1のタグ 「ユーモア」「笑える」「笑える」 のタグがつけられた作品です。

listing2= 2 には「面白い」「ばか」「ばか」のタグが付けられています。

listing3= 3 には「面白い」「ばかげた」「間抜け」のタグが付けられています。

listing4= 4 は「完全に本気」のタグ がつけられています。

「面白い」と「ばかげた」のタグで検索すると、listing2、listing3、listing1、listing4 が返されます (ここではタイトルは無視します)。

4

2 に答える 2

1

興味深い問題です。このスコープを実行するには、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")

それは役に立ちますか?

于 2013-02-02T00:16:03.497 に答える
0

SQLに触れないように、純粋なActiveRecordでソリューションが必要だと仮定します...

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

この場合、タグのカウンター キャッシュを使用してクエリを最適化する方がよいでしょう。

于 2013-01-30T17:55:12.393 に答える