Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 对多种日期格式进行排序_Php_Sorting_Mysqli - Fatal编程技术网

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。