按时间排序的正确方法是什么?

时间:2011-06-19 00:30:30

标签: php datetime date

当每个项目输入db时,使用以下方法插入日期:

 date_default_timezone_set('America/New_York');
 ob_start();
 $createdon = date('l, F j, Y, h:i A');
 ob_get_clean();

输出如下内容:

  Tuesday, May 3, 2011, 04:50 PM

这是查询:

  select test_id, why_test, date_time
  from the_test
  where p_id = '$id'
  UNION
  select pencil_id, pencil_name, date_time
  from pencils
  where p_id = '$id'
  ORDER BY 3 DESC  

现在,当我按功能使用订单时,它没有正确执行。日期仍在混淆。我使用了date_time DESC的命令。

我正在使用php / phpmyadmin。

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

将日期存储为字符串是错误的。您应该将日期存储为日期。

MySQL有一系列与日期和时间相关的适当类型;我建议使用TIMESTAMPDATETIME(可能是后者;请在手册中查找最适合您的内容)。

为了避免在修复表结构时丢失现有数据:

  • 添加正确类型的字段;
  • 更新表格中的每一行,将数据复制到新字段,可能使用UNIX_TIMESTAMP函数 - 这是一次性复制,可能需要一些时间;
  • 删除旧字段并改为使用新字段。

ORDER BY将自然地在这个领域工作,因为你现在将使用MySQL,因为它被设计用于。

答案 1 :(得分:2)

尝试

SELECT .... ORDER BY UNIX_TIMESTAMP(`date_time`) DESC

这里的想法是将字符串转换为可以排序的数字。如果您不熟悉unix时间戳,则是自1970年1月1日以来的秒数,因此如果您可以将时间转换为时间,则可以获得一种线性,简便的方法来比较时间。

但我相信MySQL的UNIX_TIMESTAMP()需要格式为:1970-01-01 00:00:00

的字符串

但是概念仍然是将日期(甚至存储)作为unix时间戳或MySQL的本机日期类型(如datetimetimestamp