在MySQL中获取最近的用户喜好

在MySQL中获取最近的用户喜好,mysql,Mysql,我有一个网站,在那里用户喜欢的产品,我需要为每个产品显示多达10个用户谁最近喜欢在desc创建的产品和他们的头像订购列表。我正试图找到一种有效的方法来做到这一点,请注意,一个产品可以有1000个喜欢,为了高效,我只想展示最后10个喜欢 我有两张桌子 产品 id, title, .... 喜欢 我想得到多达10个用户ID谁喜欢该产品最近。从那里,我将对用户ID进行另一次查询,以获取他们的姓名和头像,但如何进行第一次查询以获取每个产品的用户ID 所以结果应该是 product_id, liked

我有一个网站,在那里用户喜欢的产品,我需要为每个产品显示多达10个用户谁最近喜欢在desc创建的产品和他们的头像订购列表。我正试图找到一种有效的方法来做到这一点,请注意,一个产品可以有1000个喜欢,为了高效,我只想展示最后10个喜欢

我有两张桌子

产品

id, title, ....
喜欢

我想得到多达10个用户ID谁喜欢该产品最近。从那里,我将对用户ID进行另一次查询,以获取他们的姓名和头像,但如何进行第一次查询以获取每个产品的用户ID

所以结果应该是

product_id, liked by
1           12,23,45,67
2           13,4,5
3           1

etc

您是否尝试运行此查询:

SELECT p.id AS product_id, u.username, u.avatar, u.id AS user_id FROM products AS p 
LEFT JOIN likes AS l ON l.produc_id = p.product_id
LEFT JOIN users AS u ON u.id = l.user_id
WHERE p.id = {PRODUCT_ID} -- If you want it for a single product
ORDER BY l.created_at DESC
LIMIT 10
这将在一次查询中返回产品的10个用户名及其头像列表

您可能需要调整此查询,因为尚未提供表及其关系的详细说明

编辑:

根据请求添加另一个sql示例:

SELECT l.product_id, p.name AS product_name, GROUP_CONCAT(l.user_id) AS listOfUsers, GROUP_CONCAT(u.username) AS username, GROUP_CONCAT(u.avatar) AS avatars  FROM likes AS l
LEFT JOIN products AS p ON p.id = l.product_id
LEFT JOIN users AS u ON u.id = l.user_id
WHERE l.product_id IN(1,2,3)
ORDER BY l.created_at DESC
LIMIT 10
这应该返回类似于

product_id | listOfUsers | usernames          | avatars
1          |  1,2,3      |  test1,test2,test3 |  img1, img2, img3
2          |  4,5,6      |  test4,test5,test6 |  img4, img5, img6
编辑2:

我想这就是你一直在寻找的问题:

SELECT p.id, GROUP_CONCAT(l.user_id) As userList, GROUP_CONCAT(l.username) AS usernameList, GROUP_CONCAT(l.avatar) AS avatarList
FROM products AS p
LEFT JOIN ( 
    SELECT l.product_id, l.user_id, u.username, u.avatar
    FROM likes AS l
    LEFT JOIN users AS u ON u.id = l.user_id
    ORDER BY l.created_at DESC 
    LIMIT 10
) 
AS l ON l.product_id = p.id
WHERE p.id IN (1,2,3)
GROUP BY p.id

我担心在答案上比在问题上花费更多的精力。好的,我会尽力编辑好的,谢谢,一个好的开始,但是我如何让它返回像我的示例中那样的东西,产品id在一个产品id列表中,每个产品在一行中有10个最近喜欢的列表我可以尝试,但这不会限制top select匹配的行数,而不是每个产品的用户数吗?我想它会像你说的那样,但是我不确定如何限制每个产品的用户数量,而不在连接中创建子查询,如果写得不好,会降低站点加载时间。因此,内部选择的限制不限制每个产品的用户数量,似乎限制了整个连接,我有测试数据,前60个产品有20000张来自随机用户的投票,每个产品大约有70-80张投票,当我限制10张时,很多产品根本没有投票权,当我多投100张时,多投1000张,多投1000张。是的,刚刚测试了编辑2,该限制控制我可以看到所有产品的总投票数
SELECT p.id, GROUP_CONCAT(l.user_id) As userList, GROUP_CONCAT(l.username) AS usernameList, GROUP_CONCAT(l.avatar) AS avatarList
FROM products AS p
LEFT JOIN ( 
    SELECT l.product_id, l.user_id, u.username, u.avatar
    FROM likes AS l
    LEFT JOIN users AS u ON u.id = l.user_id
    ORDER BY l.created_at DESC 
    LIMIT 10
) 
AS l ON l.product_id = p.id
WHERE p.id IN (1,2,3)
GROUP BY p.id