2013-09-25 156 views
1

我有一个网站,客户端将事件信息存储到数据库中......非常简单。mysql查询数据显示不正确

的问题是,当我想要得到的数据了。我目前可以选择的所有数据,并按月asending责令其这样做....

我需要的是它显示的所有信息像现在一样,只是它需要通过列出所有以显示此信息当前月份的数据,然后是下个月的数据等等。我不关心,如果我有只是简单列出适当的每月递增的奥德信息,并只是使它滚动到当月的第一个事件....

目前我已经在我的分贝以下。

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

,你可以看到它在这里的行动:

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

+0

您可以发布您当前的数据库查询? –

+0

好心地显示您正在工作的db查询或示例代码 –

回答

0

也许这样的SQL:

select * from <tablename> order by year desc, month desc, day desc 

它首先会在今年对数据进行排序,然后按月份,那么白天,所有这些都按降序排列,因此您应该先看最近的事件,等等。

0

,如果我是正确的,你想要的东西是分组(aggrigation),因此,所有你需要的是组方:

SELECT * FROM myTable GROUP BY month ORDER BY month DESC; 

,我用降,首先显示当前的月份。

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列)和012数据(对于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演示

+0

@ user2813652它有帮助吗?你的问题需要更多帮助吗? – peterm