MYSQL计算产品在同一会话中浏览了多少次

时间:2018-07-11 10:33:16

标签: mysql

我正在尝试创建“其他人查看过这些产品”功能。

我有一个包含所有页面浏览量的MySQL表:

Unique ID | Product ID | Session ID 
   1          5           ABCDREA
   2          20          ABCDREA
   3          9           REAVTAS
   4          5           ESAGRRA
   5          20          ESAGRRA
   6          10          MVAOIRAS
   7         6           MVAOIRAS 

以此类推。

我正在尝试填充一个如下所示的表:

Product ID | Also Viewed Product ID | Number of Times
    5               20                  2
    20               5                  2 
    10               6                  1
    6                10                 1

所以我要做的是首先确定我的第一个表中的会话ID出现多次。 其次,我然后尝试在会话中出现的多个产品ID之间创建一个“关联”。

我很高兴在多个SQL语句中执行此操作。这将由perl脚本执行,因此我也可以在那里操作数据。

一个好的开始只是能够生成一个看起来像这样的表:

 Session   | Viewed Products  
  ABCD        1,52,512,6123

然后我可以从那里开始工作。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

尝试以下操作:

select
  session_id,
  GROUP_CONCAT(Product_id) as viewed_products,
  count(*) as count
From
  yourtable
Group by
  session_id

答案 1 :(得分:0)

使用类似的测试模式

CREATE TABLE `t` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pid` int(11) DEFAULT NULL,
  `sid` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `t` (`id`, `pid`, `sid`)
VALUES
    (1,5,'abcdrea'),
    (2,20,'abcdrea'),
    (3,9,'reavtas'),
    (4,5,'esagrra'),
    (5,20,'esagrra'),
    (6,10,'mva'),
    (7,6,'mva');

您可以通过简单的JOIN获得第一个:

select p1.sid, p1.pid as pid1, p2.pid as pid2
    from t as p1
    join t as p2 on (p1.sid = p2.sid and p1.pid <> p2.pid);

abcdrea 20  5
abcdrea 5   20
esagrra 20  5
esagrra 5   20
mva 6   10
mva 10  6

第二张表更简单:

select sid, group_concat(pid) from t group by sid;

abcdrea 5,20
esagrra 5,20
mva 10,6
reavtas 9