Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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
如何使用php对mysql表中同一字段中的morth和year值进行排序_Php_Mysql_Sql Order By_Date Sorting - Fatal编程技术网

如何使用php对mysql表中同一字段中的morth和year值进行排序

如何使用php对mysql表中同一字段中的morth和year值进行排序,php,mysql,sql-order-by,date-sorting,Php,Mysql,Sql Order By,Date Sorting,我有一个mysql表,在同一字段中包含月份和年份,如下所示 +----------------+ | duedate | +----------------+ | Sept '12 | | Oct '12 | | Nov '12 | | May'13 | | Mar'13 | | Mar '13 | | Jan '13 | | Feb '13 | |

我有一个mysql表,在同一字段中包含月份和年份,如下所示

+----------------+
|    duedate     |
+----------------+
|   Sept '12     | 
|   Oct '12      | 
|   Nov '12      | 
|   May'13       | 
|   Mar'13       | 
|   Mar '13      | 
|   Jan '13      | 
|   Feb '13      | 
|   Dec '12      | 
|   Aug '12      | 
|   Apr '13      | 
+----------------+
我想通过按DESC顺序对月份和年份值进行排序来检索此表,如下所示

+------------+
|  duedate   |
+------------+
|   May'13   | 
|   Apr '13  | 
|   Mar '13  | 
|   Mar'13   | 
|   Feb '13  | 
|   Jan '13  | 
|   Dec '12  | 
|   Nov '12  |
|   Oct '12  |
|   Sept '12 |
|   Aug '12  | 
+------------+
可以按上述方式分类吗。。我尝试了下面的sql查询,但它只按“年的描述”值对数据进行排序,月份排序不起作用

"SELECT DISTINCT duedate FROM sample_table ORDER BY substr(duedate, -2) DESC, FIELD(duedate, 'Dec', 'Nov', 'Oct', 'Sep', 'Aug', 'Jul', 'Jun', 'May', 'Apr', 'Mar', 'Feb', 'Jan')"

请帮助..

您应该将日期存储在
日期
类型中,而不是像现在这样存储在
VARCHAR
CHAR

在这种情况下,您可以非常简单地按照所需的顺序检索数据,只需使用
orderby
,方法如下:

select * from YOURTABLE order by date asc
如果出于任何原因您无法更改此项,我建议您在表中添加另一列(例如称为
read\u date
),然后仅使用以下内容更新表:

update table YOURTABLE set real_date = date
这将为列添加正确的值,您将能够正确处理日期

如果您仍然不想这样做,您可以使用如下函数强制转换数据并将其作为日期读取:

SELECT * FROM YOURTABLE ORDER BY STR_TO_DATE(date, '%b %y') DESC;

有关Mysql日期格式的更多信息。

对这些数据进行排序并不特别容易,因为数据库将其视为文本,这些文本将按字母数字排序,而不是按日期顺序排序

最好的解决方案是添加月份和年份字段,并将值存储为整数,然后使用PHP date()格式输出字符串值。然后,您可以按照您想要的方式按整数排序

或者,您可以在查询中使用
字段
关键字进行排序,但这不是 最好的方法

SELECT * FROM YOURTABLE ORDER BY FIELD(duedate, 'May 13', 'Jun 13', 'Jul 13', ....)
你可以这样试试-

SELECT STR_TO_DATE(duedate,'%M \'%Y') as due  FROM demo ORDER BY due DESC
我不确定,但在mysql中尝试使用


请参阅dem链接:

@Sooraj Mohan:使用演示链接更新了我的查询,因此您会有更好的想法。您好,谢谢您的回复。我试过这个。我已将db字段数据类型更改为date,现在数据存储为“2063-12-05”。。此外,STR_TO_DATE(日期,%b%y')会给出类似于'Dec 69'的输出。。