【问题标题】:matching percentage with mysql与mysql的匹配百分比
【发布时间】:2021-05-07 14:55:59
【问题描述】:

我一直在尝试使用 MySQL 创建一个算法,该算法返回与报价匹配的用户列表和匹配百分比。如果用户符合优惠的基本主要标准,他们首先获得 70%,然后如果他们符合一些次要标准,则匹配百分比加起来为 2%。

我还是不知道怎么做,如果你有什么想法请赐教。提前谢谢你

 1. | User    | | Offer    |
 2. |:--------| |:---------|
 3. | city    | | city-lis |
 4. | age     | | age-min  |
 5. | gender  | | gender   |

列表项

如果这些条件满足这些用户应该得到 70% 作为匹配百分比,如果他们满足其他条件,则百分比会上升

【问题讨论】:

  • 要回答这个问题,我们需要相关表和一些示例行的最小表结构。
  • 您需要将Offers 表添加到问题中,以及到目前为止您尝试过的内容
  • 只是为了确定,您当前正在搜索 1 个要约,并且您想查找与该要约的一个或多个条件匹配的所有用户?然后将分数应用于结果。
  • 是的,对于选定的报价,我需要获取匹配用户列表 + 他们与报价的匹配百分比

标签: mysql algorithm matching percentage


【解决方案1】:

从我可以从你的问题中推断出来,这段伪代码可能会有所帮助:

SELECT username,
  68 +
  ((SELECT city = "example")*2) +
  ((SELECT gender = "m")*2) +
  ((SELECT age > 21)*2) AS score
FROM users
WHERE city = "example" OR gender="m" OR age > 21;

说明

我首先选择符合任何条件的用户,然后使用子查询生成分数。 (SELECT gender = "m") 类型的子查询如果为真则将产生 1(即:如果性别为 m)。然后我将其乘以 2 以获得首选分数“2”。如果性别与“m”不匹配,则结果将为0。和0 * 2 = 0。我以 68 分开始,因为您提到如果任何字段匹配,则开始得分为 70 分。因为这个结果中的所有行都至少匹配其中之一,所以我减去了 2。

在 MySQL 中,您可以使用 SELECT 而不定义要从中选择的表。查询SELECT 1+1 将得到 2。当您将这些用作子查询时,您可以将结果中的字段用于各种技巧。我使用它们为我的分数结果生成 1 或 0。

【讨论】:

  • 感谢您的回复。我不明白你的意思 ((SELECT city = "example")*2) ...?选择*2的用途和用途
  • 我已经加了解释
猜你喜欢
  • 2012-04-05
  • 2013-06-10
  • 2019-07-11
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
相关资源
最近更新 更多