返回介绍

solution / 1800-1899 / 1892.Page Recommendations II / README_EN

发布于 2024-06-17 01:03:13 字数 4426 浏览 0 评论 0 收藏 0

1892. Page Recommendations II

中文文档

Description

Table: Friendship

+---------------+---------+
| Column Name   | Type  |
+---------------+---------+
| user1_id    | int   |
| user2_id    | int   |
+---------------+---------+
(user1_id, user2_id) is the primary key (combination of columns with unique values) for this table.
Each row of this table indicates that the users user1_id and user2_id are friends.

 

Table: Likes

+-------------+---------+
| Column Name | Type  |
+-------------+---------+
| user_id   | int   |
| page_id   | int   |
+-------------+---------+
(user_id, page_id) is the primary key (combination of columns with unique values) for this table.
Each row of this table indicates that user_id likes page_id.

 

You are implementing a page recommendation system for a social media website. Your system will recommend a page to user_id if the page is liked by at least one friend of user_id and is not liked by user_id.

Write a solution to find all the possible page recommendations for every user. Each recommendation should appear as a row in the result table with these columns:

  • user_id: The ID of the user that your system is making the recommendation to.
  • page_id: The ID of the page that will be recommended to user_id.
  • friends_likes: The number of the friends of user_id that like page_id.

Return the result table in any order.

The result format is in the following example.

 

Example 1:

Input: 
Friendship table:
+----------+----------+
| user1_id | user2_id |
+----------+----------+
| 1    | 2    |
| 1    | 3    |
| 1    | 4    |
| 2    | 3    |
| 2    | 4    |
| 2    | 5    |
| 6    | 1    |
+----------+----------+
Likes table:
+---------+---------+
| user_id | page_id |
+---------+---------+
| 1     | 88    |
| 2     | 23    |
| 3     | 24    |
| 4     | 56    |
| 5     | 11    |
| 6     | 33    |
| 2     | 77    |
| 3     | 77    |
| 6     | 88    |
+---------+---------+
Output: 
+---------+---------+---------------+
| user_id | page_id | friends_likes |
+---------+---------+---------------+
| 1     | 77    | 2       |
| 1     | 23    | 1       |
| 1     | 24    | 1       |
| 1     | 56    | 1       |
| 1     | 33    | 1       |
| 2     | 24    | 1       |
| 2     | 56    | 1       |
| 2     | 11    | 1       |
| 2     | 88    | 1       |
| 3     | 88    | 1       |
| 3     | 23    | 1       |
| 4     | 88    | 1       |
| 4     | 77    | 1       |
| 4     | 23    | 1       |
| 5     | 77    | 1       |
| 5     | 23    | 1       |
+---------+---------+---------------+
Explanation: 
Take user 1 as an example:
  - User 1 is friends with users 2, 3, 4, and 6.
  - Recommended pages are 23 (user 2 liked it), 24 (user 3 liked it), 56 (user 3 liked it), 33 (user 6 liked it), and 77 (user 2 and user 3 liked it).
  - Note that page 88 is not recommended because user 1 already liked it.

Another example is user 6:
  - User 6 is friends with user 1.
  - User 1 only liked page 88, but user 6 already liked it. Hence, user 6 has no recommendations.

You can recommend pages for users 2, 3, 4, and 5 using a similar process.

Solutions

Solution 1

# Write your MySQL query statement below
WITH
  S AS (
    SELECT * FROM Friendship
    UNION
    SELECT user2_id, user1_id FROM Friendship
  )
SELECT user1_id AS user_id, page_id, COUNT(1) AS friends_likes
FROM
  S AS s
  LEFT JOIN Likes AS l ON s.user2_id = l.user_id
WHERE
  NOT EXISTS (
    SELECT 1
    FROM Likes AS l2
    WHERE user1_id = l2.user_id AND l.page_id = l2.page_id
  )
GROUP BY user1_id, page_id;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文