我有一个网站,客户端将事件信息存储到数据库中......非常简单。
问题是当我想要获取数据时。我现在可以通过选择所有数据并按月发货来订购....
我需要的是它现在显示所有信息,除了它需要通过列出当月和下个月的所有数据来显示此信息,依此类推。我不在乎我是否只需要在适当的每月升序中列出信息,然后让它滚动到当前的月份第一次活动....
目前我的数据库有以下内容。
ID, year, month, day, event_loc, event_address, event_link, event_time, event_name
你可以在这里看到它:
答案 0 :(得分:0)
也许像这样的SQL:
select * from <tablename> order by year desc, month desc, day desc
它将按年份排序数据,然后按月计算,然后按日计算,按降序排列,因此您应首先查看最近的事件,依此类推。
答案 1 :(得分:0)
如果我是正确的,你想要的是分组(聚合),所以你需要的只是分组:
SELECT * FROM myTable GROUP BY month ORDER BY month DESC;
我用降序来显示当前月份。
答案 2 :(得分:0)
如果我理解正确并且您只想选择从当月第一天开始的活动,那么您可以这样做
SELECT ID, year, month, day, event_loc, event_address, event_link, event_time, event_name
FROM events
WHERE STR_TO_DATE(CONCAT_WS('-', year, month, day), '%Y-%c-%e') >= DATE_FORMAT((CURDATE()), '%Y-%m-01')
ORDER BY year, month, day
这是 SQLFiddle 演示
现在,为了能够使用索引和范围搜索正常查询您的数据,我建议您更改表的架构,以使用datetime
(event_date
列)和time
(对于event_duration
)数据类型。建议的架构可能如下所示
CREATE TABLE events
(`ID` int,
`event_date` datetime,
`event_loc` varchar(256),
`event_address` varchar(256),
`event_link` varchar(256),
`event_duration` time,
`event_name` varchar(256)
);
然后查询看起来像
SELECT ID, DATE(event_date) event_date,
event_loc,
event_address,
event_link,
CONCAT(DATE_FORMAT(event_date, '%l:%i%p - '),
DATE_FORMAT(ADDTIME(event_date, event_duration), '%l:%i%p')) event_timee,
event_name
FROM events
WHERE event_date >= DATE_FORMAT(CURDATE(), '%Y-%m-01')
ORDER BY event_date
这是 SQLFiddle 演示