我正在尝试创建“其他人查看过这些产品”功能。
我有一个包含所有页面浏览量的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
然后我可以从那里开始工作。
有什么想法吗?
答案 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