2010-11-19 48 views
1

我在数据库中有一些日期/事件,我想按月排序它们(年无关紧要) - 现在所有的时间戳都在unix中一个名为eventDate的列。如何做出该查询?mysql ORDER BY“month”with unixtime

SELECT * FROM日历ORDER BY EVENTDATE

显然,这对它们进行分类,但我要确保在所有年所有事情都是由每月分组 - 那么显然需要安排他们一月,二月,三月,等等。

有什么建议吗?

谢谢!

回答

3

您可以使用FROM_UNIXTIME()函数+ MONTH()函数。

SELECT MONTH(FROM_UNIXTIME(0)); 
-- 12 

但没有理由来存储Unix时间戳在实际时间戳(YYYY-MM-DD HH:II:SS)。 RDBMS具有操作日期的功能,如果您确实需要unix时间戳(我从来不会这样做,TBH),则可以使用UNIX_TIMESTAMP函数。

2

使用unix时间有很多非常好的理由。良好的数据库设计极大地影响了运行数据库和网站的成本,特别是繁忙的数据库和网站。

我知道的最好情况是...... 一个非常繁忙的服务器,需要存储时间数据,但实际访问时间数据的次数与实际进行的读取和写入次数相比很少分贝。它需要cpu资源来处理所有时间数据的操作,所以除非你绝对必须这样做。

一个真实的例子是我自己的。我们需要4个前端Web服务器,并将增加更多。他们也很老,需要更新。查看6台需要更换的服务器,这将花费我们一大笔钱。决定看看我们在做什么。我们现在有2台前端服务器,而不是4台或6台。优化数据库结构和查询以及插入和读取数据的代码。

一个考虑到您的确切考虑的例子...更改了1行php代码,将时间列更改为unix而不是yyyy-dd-mm hh:mm:ss,在时间列中添加了一个索引,一个操作从0.08秒开始到完成0.00031秒。 对cpu资源的多重影响是巨大的。下一个排队的操作执行得更快......等等

这就是为什么人们有数据库设计师的工作......这真的很重要。

当然,如果你的网站很慢,不忙..可能没有人会注意到。 但是,如果你是成功的,它会很重要。 如果你有一个繁忙的网站,并且你的服务器缓慢......看看这样的事情。你可能不需要一个新的盒子或更多的内存,你可能需要清理代码并优化分贝。

时间戳,它们的形式以及它们的使用和存储方式DO MATTER。