【问题标题】:Mysql query for getting profiles with similar interests用于获取具有相似兴趣的个人资料的 Mysql 查询
【发布时间】:2021-08-24 08:55:49
【问题描述】:

我正在寻求解决问题的帮助。我有一个包含以下列/字段的表格 -

= 用户名 | 用户邮箱 | 用户兴趣 | ....和其他领域

= 用户A | userA@email.com | 1,2,10

价值 = 用户 B | userB@email.com | 15,27,9,7,2

userName(varchar) = 主键

userEmail(varchar) = 用户的电子邮件

userInterests(varchar) = 以逗号分隔的兴趣数字。我已经将这些数字映射到它们在 PHP 脚本中的实际值(兴趣)。例如1 - 绘画,2 - 跳舞等等......

现在我正在尝试寻找具有相似兴趣的用户。用户可以拥有的兴趣数量可能会有所不同。我的目标是为任何用户找到最佳匹配。

假设如果用户 A 有 3 个兴趣,用户 B 有 5 个兴趣,其中 1 个兴趣在两个用户中是共同的,所以我想得到匹配的用户名。假设如果有另一个用户有 2 个共同兴趣,那么在这种情况下,返回该个人资料。一般来说,我想找到最佳匹配(所有兴趣与其他用户相遇),如果没有,然后是次佳匹配(至少有 2 或 1 个共同兴趣)。

我已经使用过此解决方案,但无法获得所需的输出。只有一张表,所以我也不能使用连接。 SQL - Finding Users with Similar Interests

请帮我解决这个问题,过去 2 天我一直在处理这个问题,但找不到合适的解决方案。我尽力解释了这个问题,如果我没有这样做,请告诉我,我可以详细说明。谢谢

【问题讨论】:

  • 也许 FIND_IN_SET 或使用 REGEXP 可以帮助发现出现?结合同一张表的子查询。
  • 修复你的数据模型!在字符串中存储数字是错误的!不声明外键关系是错误的!在一个字符串列中存储多个值是错误的!

标签: mysql sql


【解决方案1】:

我认为最好的方法是首先规范化您的数据库,这样您就没有类似数组的结构。这将使这种类型的查询更高效,更容易执行。

如果这不是一个选项,您可以查看this answer,了解如何通过查询临时表并从那里开始工作来进行此规范化。一旦你有了一个单独的兴趣表,你就可以继续你已经在问题中指出的解决方案,计算出现次数。

【讨论】:

    猜你喜欢
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2012-11-18
    相关资源
    最近更新 更多