Php 对多种日期格式进行排序
在数据库中,我得到了列Php 对多种日期格式进行排序,php,sorting,mysqli,Php,Sorting,Mysqli,在数据库中,我得到了列date\u of\u premiere(类型:INT)。通过验证列可以存储三种“类型”的值: YYYY(例如,2016年,没有关于具体月份和日期的信息) YYYYMM(例如201511,没有关于特定日期的信息) YYYYMMDD(如20151101) 我在排序方面有问题,因为当我尝试对该列进行排序时 $query = $this->db->query(" SELECT * from table order by `date_of_premiere "); 。
date\u of\u premiere
(类型:INT)。通过验证列可以存储三种“类型”的值:
YYYY(例如,2016年,没有关于具体月份和日期的信息)
YYYYMM(例如201511,没有关于特定日期的信息)
YYYYMMDD(如20151101)
我在排序方面有问题,因为当我尝试对该列进行排序时
$query = $this->db->query(" SELECT * from table order by `date_of_premiere ");
。。。格式为YYYY的记录将始终位于第一位
当我获取数据时,我可以做一些变通
$dates =[];
while($row = $query->fetch_assoc())
{
if(strlen($row['date_of_premiere']) == 4)
{
$dates[] .= intval($row['date_of_premiere'] .'0000');
} else if (strlen($row['date_of_premiere']) == 6)
{
$dates[] .= intval($row['date_of_premiere'] .'00');
} else
{
$dates[] .= intval($row['date_of_premiere']);
}
}
…然后我就可以开始($dates)
// input values: 2015, 2016, 201511, 20151101
// example output with correct sorting:
Array
(
[1] => 20150000
[0] => 20151100
[3] => 20151101
[2] => 20160000
)
。。。但我好奇的是,是否有办法仅使用mysqli查询对首映式的日期进行排序。您可以按日期列的字符进行排序:
... ORDER BY CAST(date_of_premier AS CHAR(32))
我想这将是一个有点复杂的实现。我发现MySQLi中有datetime列类型。也许用它代替INT是个好主意?我知道你并不总是知道完整的日期,但是你可以添加一些布尔值来表示缺少的信息,默认情况下排序会起作用:)我想,我找到了非常简单的解决方案。我将mysql列的类型更改为varchar。现在我似乎可以按预期对值进行排序:array([1]=>2015[0]=>201511[3]=>20151101[2]=>2016)无论如何,感谢您的帮助:)无论如何,如果您不需要mysql对其值进行任何算术运算,我会将该列更改为varchar。