我在MySQL表中有一堆记录,每个记录都有一个日期属性(m.d.Y),一个时间属性存储为hr:min:sec。我想根据日期和时间按时间顺序对它们进行排序。我如何用PHP / MySQL做到这一点?
修改:如果您认为在数据库中存储日期和时间的方式更为有效,请告知我们。
答案 0 :(得分:3)
如果您认为在数据库中存储日期和时间的方式更为有效,请告知我们。
是的,在表格中设置datetime
或timestamp
字段,按此字段创建索引并按其排序。
查询:
/* 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或其他字符串函数。