MySQL:如何在表中为每个用户获取TOP访问过的产品?

时间:2015-11-24 19:59:24

标签: mysql join

我有一个产品系统。每次用户输入产品时,我都会在我的数据库中插入一条记录。

我有一个包含用户和id_products的表,如下所示:

users           id_product
____________________________
jondoe               2
george               9
jondoe               5
jondoe               2
george               9
george               9
george               2

我需要一个结果(查询),它显示每个用户的TOP访问产品ID,因此结果将是这样的:

jondoes most visited product is ID 2
georges most visitedproduct is ID 9

我一直在寻找答案,但我无法弄明白。非常感谢你的帮助,我非常感激。

1 个答案:

答案 0 :(得分:1)

这很痛苦,因为它涉及聚合。解决此问题的一种方法是使用非常复杂的查询。另一个使用变量。第三种方法使用在许多情况下有效的聚合技巧:

select user,
       substring_index(group_concat(id_product order by cnt desc), ',', 1) as mostCommonProduct
from (select user, id_product, count(*) as cnt
      from t
      group by user, id_product
     ) t
group by user;

使用此方法时的一个危险是中间结果可能太长。您可以设置group_concat_max_len系统变量来解决该特定问题。