gpt4 book ai didi

php - 在 MySQL 中为用户排名列表找到最佳匹配

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:55 24 4
gpt4 key购买 nike

我将把它分成两部分:

  1. 我有一个用户,其中包含他想要的产品“功能”列表。要求用户从 1-10 对这些功能进行排名。我还有一张摆满产品的 table 。这些产品中的每一个都具有不同的功能。有些产品具有 1-10 的所有功能,但有些产品只具有其中的几个。我想确定哪个产品与用户的排名最匹配,并向用户提供一个有序的结果集,最好的匹配在前,最差的匹配在后。

  2. 上述查询实际上只是用户正在执行的操作的一部分。用户还提供其他搜索条件(例如产品类别、价格等)以及功能排名。因此,我希望功能匹配仅适用于通过这组过滤器的产品。我将如何组合这些?

我发现了一些类似的问题,例如 thisthis ,但它们还不够接近,我无法弄清楚如何将这些解决方案应用于我的情况。

涉及的表看起来像这样:

产品(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 个项目的数组,但将来可能会改变)

    )

最佳答案

我不能完全使用 SQL 来实现它,但是一个简单的 PHP 解决方案类似于以下(未经测试):

//Array of $productId => list of feature ids
$products;
$userFeatures;
$scores = array();
//For every product work out a score based on features and user ranking.
foreach($products as $productId => $prodFeatures){
$score = 0;
foreach($prodFeatures as $feature){
//Could also perhaps penalise products lacking features.
$score += $userFeatures[$feature]["rank"];
}
$scores[$productId] = $score;
}
arsort($scores);
echo "Best match is ".$scores[0];

显然这有点粗糙,但希望它有所帮助。

编辑:这假设排名 10 是最好的。

关于php - 在 MySQL 中为用户排名列表找到最佳匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13849395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com