【发布时间】:2012-12-12 21:57:53
【问题描述】:
我将把它分成两部分:
我有一个用户列出了他想要的产品“功能”。要求用户从 1-10 对这些特征进行排名。我还有一张摆满产品的桌子。这些产品中的每一个都有不同的功能。有些产品将具有 1-10 的所有功能,但有些产品只有其中的几个。我想确定哪个产品与用户的排名最匹配,并为用户提供一个有序的结果集,最好的匹配在前,最差的匹配在后。
上述查询实际上只是用户正在执行的操作的一部分。用户还提供其他搜索条件(例如产品类别、价格等)以及特征排名。因此,我希望功能匹配仅适用于通过这组过滤器的产品。我将如何结合这些?
我发现了一些类似的问题,例如 this 和 this,但它们还不够接近,我无法弄清楚如何将这些解决方案应用于我的情况。
所涉及的表格如下所示:
产品(id,产品)
特征(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 项数组,但将来可能会改变)
)
【问题讨论】:
-
我在这里看到的一个问题是,具有所有功能的产品将始终排在列表的顶部——除非没问题。
-
您需要一种将排名应用于特征的方法。例如,如果一个产品只匹配 rank = 1,而另一个匹配 rank = 2 和 3,那么选择哪个?
-
@EricPetroelje 如果所有具有所有功能的产品都排在首位,那没关系。