我有一个内联网网站,只有登记用户能够观看录像。 用户可以观看诸如Pipe、iPad Anders或Web等多个平台的录像,并跟踪所有这些信息(关于问题的简单性,请不考虑其他平台)。 我试图在行政小组展示一些视频观察报告。
表结构如下(我有其他栏目,但对于这一问题并不重要);
CREATE TABLE IF NOT EXISTS `history` (
`history_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`video_id` int(11) unsigned NOT NULL,
`user_id` int(11) unsigned NOT NULL,
`platform_id` int(11) unsigned NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`history_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=9 ;
INSERT INTO `history` (`history_id`, `video_id`, `user_id`, `platform_id`, `created`) VALUES
(1, 1, 1, 1, 2012-05-06 08:13:57 ),
(2, 2, 1, 1, 2012-05-06 13:23:57 ),
(3, 1, 1, 4, 2012-05-06 18:16:39 ),
(4, 4, 2, 3, 2012-05-07 08:14:19 ),
(5, 1, 2, 3, 2012-05-07 08:14:55 ),
(6, 2, 1, 1, 2012-05-07 15:14:55 ),
(7, 3, 2, 1, 2012-05-07 18:05:14 ),
(8, 3, 1, 4, 2012-05-07 18:15:24 );
CREATE TABLE IF NOT EXISTS `sys_list_of_values` (
`value_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`display_text` text COLLATE utf8_unicode_ci NOT NULL,
`list_value` text COLLATE utf8_unicode_ci NOT NULL,
`list_group` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`value_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10 ;
INSERT INTO `sys_list_of_values` (`value_id`, `display_text`, `list_value`, `list_group`) VALUES
(1, iPhone , iphone , platform ),
(2, Android , android , platform ),
(3, iPad , ipad , platform ),
(4, Website , web , platform ),
(5, Active , active , status ),
(6, Passive , passive , status ),
(7, Waiting for approvement , waiting , status ),
(8, Spam , spam , status ),
(9, Deleted , deleted , status );
CREATE TABLE IF NOT EXISTS `users` (
`user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
INSERT INTO `users` (`user_id`, `username`) VALUES
(1, test_user_1 ),
(2, test_user_2 );
CREATE TABLE IF NOT EXISTS `videos` (
`video_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) unsigned NOT NULL,
`title` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`status` int(11) unsigned NOT NULL,
PRIMARY KEY (`video_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;
INSERT INTO `videos` (`video_id`, `user_id`, `title`, `created`, `status`) VALUES
(1, 1, Test Video 1 , 2012-05-07 08:12:52 , 7),
(2, 1, Test Video 2 , 2012-05-07 08:12:52 , 5),
(3, 1, Test Video 3 , 2012-05-07 08:13:17 , 5),
(4, 1, Test Video 4 , 2012-05-07 08:13:17 , 6);
我试图发表如下报告:
Platform | Watch_Count
===============================
iPhone 20
iPad 0
Android 2
Website 120
Total 142
我有一些过滤选择,如<代码>video_id ,created
,platform
等。 例如,我想对所有录像或特定录像(录像)或日期(日期)之间显示总观察报告。 我也想展示所有平台,无论它们是零还是什么。
下面的问询只显示“i”和“网站”,但我想显示所有平台。 如果没有观察点,就不得不将其显示为0(零)。 我还可以显示一个最后一行,总和为<代码>watch_count和显示。
SELECT sys_list_of_values.display_text, COUNT(history.history_id) AS total_watch FROM history
JOIN sys_list_of_values ON sys_list_of_values.value_id = history.platform_id
WHERE history.video_id = 1
AND history.created < 2012-05-07
GROUP BY history.platform_id