SQL:如何根据其他用户的喜好建议喜欢的人?

时间:2018-07-26 02:47:02

标签: mysql sql database algorithm data-analysis

每个用户都可以添加自定义权重点赞

  

“我喜欢香蕉(7/10)和苹果(10/10)”

我想根据其他用户的喜好建议用户喜欢

  

“您喜欢香蕉。您也可能喜欢苹果。”

SQL表具有以下结构:

# users
- id
- ... 

# likes
- id
- label (e.g. "apple")
- ...

# user_likes
- id
- user_id
- like_id
- weight

所需的输出

# 1. Suggestions for user ("You probably like apples!")
| like_id | relevance |
-----------------------
| 5       |  0.5      |

# 2. Suggestions for like ("Apples fit to bananas!")
| like_id | relevance |
-----------------------
| 5       |  0.8      |

我当前的想法是用PHP循环所有记录,但这不对。

是否有最佳实践或算法?有想法吗?

谢谢!

重要:我找到了this和其他示例/重复项来实现我所需要的。我可能将此问题检测为重复问题,但是我对最新最佳做法感兴趣。许多解决方案已有10年的历史了。

1 个答案:

答案 0 :(得分:1)

此查询将查找其他用户的所有喜欢,这些其他用户与给定用户共享一个或多个喜欢。然后,它将选择这些用户的平均点赞权重,以确定每个点赞的相关性。

SELECT 
    l.*, AVG(ul_3.weight) AS weight
FROM 
    user_likes ul_1
INNER JOIN user_likes ul_2 
    ON ul_1.like_id = ul_2.like_id 
    AND ul_1.user_id <> ul_2.user_id
INNER JOIN user_likes ul_3 
    ON ul_2.user_id = ul_3.user_id
INNER JOIN likes l 
    ON l.id = ul_3.like_id
WHERE 
    ul_1.user_id = 5
    AND l.id <> ul_1.like_id
GROUP BY 
    l.id
ORDER BY
    weight DESC;

使用示例数据工作的SQL提琴-http://sqlfiddle.com/#!9/866825/2