一致するオプションタグの量順に並べられた、すべての条件付きタグでタグ付けされた、できるだけ多くのオプションタグに一致する製品を見つけたいと思います。
私はオプションのタグを数えるためにこれを思いついた:
optional_tags = [1,2,3]
conditional_tags = [4]
products = Product.select('COUNT(*) AS count_all, products.*')
.joins(:tags).where('tags.id IN (?)', optional_tags)
.group('products.id')
.order('count_all DESC')
製品IDと一致するオプションのタグの数を正常に取得しました:
products: {30=>4, 26=>3, 29=>3, 27=>2, 28=>1}
条件付きタグを追加しようとすると、空のハッシュしか取得されません。私はそれをこのように試しました:
products = Product.where('tags.id IN (?)', conditional_tags)
.select('COUNT(*) AS count_all, products.*')
.joins(:tags).where('tags.id IN (?)', optional_tags)
.group('products.id')
.order('count_all DESC')
Railsはクエリを最適化し、すべての場所のパーツを結合します...
コンストラクトに条件付きタグを追加するにはどうすればよいですか?助けてくれてありがとう!
例:
製品の種類は重要ですが、人々は細部を気にしません。
condition_tags=[ 1 台の車]
optional_tags = [ 2 赤、3 メルセデス、4 高速]
赤い 車でも大丈夫ですが、一致するタグがもっとあるとしても、メルセデスの赤い高速バイク は結果のリストに含まれないはずです。