我希望做一个select,并将未来事件和先前事件的数量限制在20以上,例如对于最先的事件。MySQL按总和限制行数
future_events
和previous_event
是1或0.如果需要,我可以存储为单个列。
我想我错过了GROUP BY,但我的大脑今天早上没有与它在一起。这是我有:
SELECT name, start_timestamp, end_timestamp, future_event, previous_event, url
FROM events_table
WHERE status != 'draft' AND status != 'canceled'
-- AND SUM(previous_event) <= 20
-- AND SUM(future_event) <= 20
ORDER BY start_timestamp DESC
-- Sample Table
CREATE TABLE IF NOT EXISTS `events_table` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`url` varchar(500) NOT NULL,
`start_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`end_timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`status` varchar(10) NOT NULL,
`future_event` tinyint(1) NOT NULL,
`previous_event` tinyint(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- Data
-- Each row is an event with a unique event, time, url etc.
预期结果
- 收益最高的40个结果总
- 最多20个未来的事件(其中
future_event
= 1) - 最大20个上一页事件(其中
previous_event
= 1) - 只显示最近的事件
你可能想使用HAVING子句:http://www.techonthenet.com /mysql/having.php –
谢谢,我会再试一次! – ptimson
这样看待WHERE是预聚合过滤,即逐行HAVING是后聚合过滤,参考GROUPS – Mihai