我希望做一個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