按时间顺序排序MySQL记录?

时间:2012-08-14 03:54:07

标签: php mysql sorting

我在MySQL表中有一堆记录,每个记录都有一个日期属性(m.d.Y),一个时间属性存储为hr:min:sec。我想根据日期和时间按时间顺序对它们进行排序。我如何用PHP / MySQL做到这一点?

修改:如果您认为在数据库中存储日期和时间的方式更为有效,请告知我们。

7 个答案:

答案 0 :(得分:3)

  

如果您认为在数据库中存储日期和时间的方式更为有效,请告知我们。

是的,在表格中设置datetimetimestamp字段,按此字段创建索引并按其排序。

查询:

/* add a column */
alter table `table` add column `created_at` datetime not null default "0000-00-00 00:00:00"
/* create an index */
alter table `table` add index `created_at` (`created_at`)
/* sort */
select * from `table` order by `created_at`

答案 1 :(得分:3)

如果您想根据日期和时间对它们进行排序,您应该考虑使用TIMESTAMP。如果您正在使用该字段进行记录保存,则可以将默认值设置为CURRENT_TIMESTAMP,MySQL将自动为您插入此信息。

然后,像下面这样的简单查询将获取所有记录并按TIMESTAMP字段对它们进行排序。

SELECT * FROM table WHERE something = 'matches' ORDER BY thetimestampfield DESC

示例PHP代码:

<?php
  // $c is a reference to mysql_connect() somewhere else in your code
  $q = "SELECT * FROM table WHERE something = 'matches' ORDER BY thetimestampfield DESC";
  $r = mysql_query($q, $c);
  while($row = mysql_fetch_assoc($r)) {
    // do your thing
  }
?>

答案 2 :(得分:2)

您可以合并这两个属性,因为MySQL具有DateTime数据类型。由于您必须使用属性,因此您可以通过连接这两个属性并将其转换为实际DateTime值来对记录进行排序。

SELECT *
FROM tablename
ORDER BY STR_TO_DATE(CONCAT(`date`, ' ', `time`), '%m/%d/%Y') ASC

答案 3 :(得分:1)

将数据存储为时间戳或日期时间然后使用PHP中的date()函数进行格式化会更有效。

$var1 = date("m.d.Y", timestamp);
$var1 = date("h:i:s", timestamp);

答案 4 :(得分:1)

好的,在你的MySQL表中,创建一个新列,无论名称是什么,使用类型DateTime或Timestamp,你可以将默认设置为CURRENT TIMESTAMP或类似的东西,我记不清究竟是什么它被称为,但在PHPMyAdmin中很容易做到。然后,你可以按顺序排序。该列将自动填写。或者你可以根据需要手动填写。然后你只需订购(ColumnName);

答案 5 :(得分:1)

为什么不将Mysql表字段数据类型指定为“DATETIME”,并且从php中可以保存date("Y-m-d H:i:s")之类的数据?

您可以选择记录并按此日期字段按降序或升序对其进行排序。

答案 6 :(得分:1)

尽可能地尝试利用数据库。

在SELECT结尾处使用ORDER BY date_field,time_field。

如果列实际上是字符串,那么考虑创建一个新表并更改列类型,使它们分别是日期和时间。 STR_TO_DATE函数可以将字符串转换为日期。如果您愿意将它们合并到一个日期时间列中。如果你想这样做,可能需要一个CONCAT或其他字符串函数。