我想直接从 sql 查询中随机获取 SUM,但是如何从这个查询中返回持续时间字段的总和: 那是表格:
CREATE TABLE IF NOT EXISTS `video_clips` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(155) NOT NULL,
`duration` int(11) NOT NULL,
`rank` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
INSERT INTO `video_clips` (`id`, `name`, `duration`, `rank`) VALUES
(1, 'clip1', 3, 1),
(2, 'clip2', 5, '3'),
(3, 'clip3', 8, '2'),
(4, 'clip4', 6, '1');
这就是代码:
$time=16;
while($sum=$time) {
$result=mysql_query("(SELECT duration FROM table where rank=1 ORDER BY rand() LIMIT 1) UNION ALL
(SELECT duration FROM table where rank=2 ORDER BY rand() LIMIT 1) UNION ALL
(SELECT duration FROM table where rank=3 ORDER BY rand() LIMIT 1)" );
$sum=??????
}
或者是否可以将结果添加到别名表,然后从该别名表返回 SUM,类似于:
$time=16;
while($sum=$time) {
$result=mysql_query("(SELECT duration FROM table where rank=1 ORDER BY rand() LIMIT 1) UNION ALL
(SELECT duration FROM table where rank=2 ORDER BY rand() LIMIT 1) UNION ALL
(SELECT duration FROM table where rank=3 ORDER BY rand() LIMIT 1) AS table1");
$sum=mysql_query("SELECT SUM(duration) FROM table1");
}
这可能吗?我试过了,但没有用。
最佳答案
就像@Dagon 在评论中暗示的那样:
SELECT rank, SUM(duration)
FROM video_clips
GROUP BY rank WITH ROLLUP
这会给你这个结果:
+------+---------------+
| rank | SUM(duration) |
+------+---------------+
| 1 | 9 |
| 2 | 8 |
| 3 | 5 |
| NULL | 22 |
+------+---------------+
按列(排名)分组的 NULL 表示该行是一个“ super 总计”。 可以进行更复杂的分组,有关更多信息,请参阅:
http://dev.mysql.com/doc/refman/5.5/en/group-by-modifiers.html
关于php - 如何在此 SQL 查询中返回 SUM(摘要),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9523252/