Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL PHP按日期对具有完整日期名称的表行进行排序_Php_Mysql_Sorting - Fatal编程技术网

MYSQL PHP按日期对具有完整日期名称的表行进行排序

MYSQL PHP按日期对具有完整日期名称的表行进行排序,php,mysql,sorting,Php,Mysql,Sorting,我有一个表,其中有一个日期字段。 插入其中的项目的值是完整的日期名称 如何按正确的日期对所选结果进行排序 示例表 February 10, 2010 January 5, 2010 January 4, 2010 January 5, 2009 January 6, 2010 March 21, 2010 我想发生什么 January 5, 2009 January 4, 2010 January 5, 2010 January 6, 2010 February 10, 2010 March

我有一个表,其中有一个日期字段。 插入其中的项目的值是完整的日期名称

如何按正确的日期对所选结果进行排序

示例表

February 10, 2010
January 5, 2010
January 4, 2010
January 5, 2009
January 6, 2010
March 21, 2010
我想发生什么

January 5, 2009
January 4, 2010
January 5, 2010
January 6, 2010
February 10, 2010
March 21, 2010
这有mysql函数吗

这是我的问题。日期字段名为
Date

$sql = "SELECT * FROM `$table` ORDER BY date";
不幸的是,这只是按字母顺序对结果排序。 我应该如何修改/更改查询

非常感谢您未来的见解和反馈!:)

更新


所以问题是字段是
string/varchar
。数据存储后是否可以更改此设置?上面的查询会自动正确排序吗?

这是因为数据库中的列设置为
字符串
/
varchar
,而不是
日期时间
字段。有几种方法可以实现这一点,但最简单的方法是将字段转换为datetime字段

效率低下的解决方案是:

$sql = "SELECT * FROM `$table` ORDER BY STR_TO_DATE(`date`)";

这将把字符串转换为日期,然后对它们进行排序,但必须对数据库中的每一行执行此操作,这可能会变得很麻烦。底线:如果您使用的是datetimes,请使用
datetime
字段。

这是因为数据库中的列设置为
字符串,而不是
datetime
字段。有几种方法可以实现这一点,但最简单的方法是将字段转换为datetime字段

效率低下的解决方案是:

$sql = "SELECT * FROM `$table` ORDER BY STR_TO_DATE(`date`)";

这将把字符串转换为日期,然后对它们进行排序,但必须对数据库中的每一行执行此操作,这可能会变得很麻烦。底线:如果您使用的是datetime,请使用
datetime
字段。

您需要将日期存储为datetime或timestamp字段。我建议您使用时间戳字段,这样您可以在检索时轻松地将其格式化为所需格式。

您需要将日期存储为日期时间或时间戳字段。我建议您使用时间戳字段,这样您可以在检索时轻松地将其格式化为您想要的格式。

您必须了解数据库(表和字段)及其规范化…您必须了解数据库(表和字段)及其规范化…存储数据后是否可以更改字段类型?如果我使用上面的查询,它会自动按日期排序吗?我不太确定这是否可行,但为了安全起见,这是一个相当简单的迁移。第一步,添加一个新字段
datetime\u temp
(a
datetime
field),然后运行一个查询:
UPDATE`table`SET`datetime\u temp`=stru TO_DATE(`DATE`)
,确保数据库中的数据正确,删除日期字段,并将
datetime\u temp
重命名为
DATE
,我明白了!非常感谢你!另外,请务必查看有关如何检索数据库中格式化的日期的函数。谢谢您的提醒!这就是
date\u格式
函数的目的。我在研究这个问题的过程中遇到过这个问题。我必须再次询问,我将如何将其添加到上面的查询中?示例我的日期格式是
date\u格式(日期,%M%e,%Y')
是否可以将其添加到
$sql=“SELECT*FROM$table ORDER BY date”?存储数据后是否可以更改字段类型?如果我使用上面的查询,它会自动按日期排序吗?我不太确定这是否可行,但为了安全起见,这是一个相当简单的迁移。第一步,添加一个新字段
datetime\u temp
(a
datetime
field),然后运行一个查询:
UPDATE`table`SET`datetime\u temp`=stru TO_DATE(`DATE`)
,确保数据库中的数据正确,删除日期字段,并将
datetime\u temp
重命名为
DATE
,我明白了!非常感谢你!另外,请务必查看有关如何检索数据库中格式化的日期的函数。谢谢您的提醒!这就是
date\u格式
函数的目的。我在研究这个问题的过程中遇到过这个问题。我必须再次询问,我将如何将其添加到上面的查询中?示例我的日期格式是
date\u格式(日期,%M%e,%Y')
是否可以将其添加到
$sql=“SELECT*FROM$table ORDER BY date”