我有一对多表关系:
1 user
对于多个 event
1 event
对于多个 event_attribute
现在,我分组 userId
想知道每个事件属性有多少?
以下是您可以使用的数据架构:
更具体地说,这是我使用的db模式:
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`name` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`)
);
CREATE TABLE `event` (
`id` int(11) NOT NULL,
`name` varchar(45) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `event_attr` (
`id` int(11) NOT NULL,
`att_name` varchar(45) DEFAULT NULL,
`event_id` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `user` VALUES (1,'user1'),(2,'user2'),(3,'user3');
INSERT INTO `event` VALUES (1,'event1',1),(2,'event2',1),(3,'event3',1),(4,'event4',2),(5,'event5',2),(6,'event6',3);
INSERT INTO `event_attr` VALUES (1,'att1','1'),(2,'att2','1'),(3,'att3','1'),(4,'att1','2'),(5,'att2',NULL);
如果我在跑步:
select u.id, group_concat(e.name)
from user u
join event e on u.id=e.user_id
group by u.id
我会得到:
1 event1,event2,event3
2 event4,event6
3 event 6
那很好。但向前一步,我需要知道每个用户每个事件的计数,例如:
1 evet_att1:3;event_att2:2
2 event_att3:1
那就不可能了。我可以只使用一个查询来获得以上预期的响应吗?
1条答案
按热度按时间bihw5rsg1#
我们可以尝试聚合
event
首先按用户和事件列出表,以生成计数:演示