mysql查询数据无法正常显示

时间:2013-09-25 04:38:50

标签: mysql

我有一个网站,客户端将事件信息存储到数据库中......非常简单。

问题是当我想要获取数据时。我现在可以通过选择所有数据并按月发货来订购....

我需要的是它现在显示所有信息,除了它需要通过列出当月和下个月的所有数据来显示此信息,依此类推。我不在乎我是否只需要在适当的每月升序中列出信息,然后让它滚动到当前的月份第一次活动....

目前我的数据库有以下内容。

ID, year, month, day, event_loc, event_address, event_link, event_time, event_name

你可以在这里看到它:

http://www.michael-eubanks.com/events.php

3 个答案:

答案 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 演示


现在,为了能够使用索引和范围搜索正常查询您的数据,我建议您更改表的架构,以使用datetimeevent_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 演示