これを2つの部分に分けます。
私には、彼が望む製品の「機能」のリストを持つユーザーがいます。ユーザーは、これらの機能を1から10までランク付けするように求められます。商品がいっぱいのテーブルもあります。これらの各製品にはさまざまな機能があります。一部の製品には1〜10のすべての機能がありますが、一部の製品にはいくつかしかありません。どの製品がユーザーのランキングに最もよく一致するかを判断し、最も一致するものが最初で、最も一致しないものが最後になるように、順序付けられた結果セットをユーザーに提供したいと思います。
前述のクエリは、実際にはユーザーが行っていることの一部にすぎません。ユーザーは、機能のランク付けとともに、他の検索基準(製品カテゴリ、価格など)も提供しています。そのため、この一連のフィルターを通過する製品にのみ機能マッチングを適用したいと思います。これらをどのように組み合わせるのですか?
私はこれとこれのようないくつかの同様の質問を見つけましたが、それらは私の状況にそれらの解決策を適用する方法を理解するのに十分に近いものではありません。
関連するテーブルは次のようになります。
商品(id、product)
機能(id、機能)
product_features(id、product_id、feature_id)
ユーザーは次のような配列を使用して検索を送信します(キーは実際には機能IDであり、ランクは値です)。
[users_features] => Array
(
[1] => Array
(
[rank] => 9
)
[2] => Array
(
[rank] => 1
)
[3] => Array
(
[rank] => 3
)
(これは現在10項目の配列になりますが、将来変更される可能性があります)
)