0

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

编辑:如果您认为在数据库中存储我的日期和时间有更有效的方法,请告诉我。

4

7 回答 7

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`
于 2012-08-14T03:58:07.333 回答
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
  }
?>
于 2012-08-14T04:03:00.733 回答
2

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

SELECT *
FROM tablename
ORDER BY STR_TO_DATE(CONCAT(`date`, ' ', `time`), '%m/%d/%Y') ASC
于 2012-08-14T03:59:25.247 回答
1

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

$var1 = date("m.d.Y", timestamp);
$var1 = date("h:i:s", timestamp);
于 2012-08-14T03:58:22.867 回答
1

好的,在你的 MySQL 表中,创建一个新列,不管名称是什么,类型为 DateTime 或 Timestamp,你可以将默认设置为 CURRENT TIMESTAMP 或类似的东西,我不记得具体叫什么了,但在 PHPMyAdmin 中很容易做到。然后,您可以按此订购。该列将自动填写。或者,您可以根据需要手动填写。然后你只需 ORDER BY( ColumnName);

于 2012-08-14T03:59:13.057 回答
1

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

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

于 2012-08-14T03:59:19.360 回答
1

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

在 SELECT 的末尾使用 ORDER BY date_field, time_field。

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

于 2012-08-14T04:00:17.687 回答