在数据库中,我有列date_of_premiere
(类型:INT)。顺便指出,列可以存储三个值中的“类型”的验证:排序多个日期格式
YYYY(如2016年,当有关于具体的月份和日子没有资料)
YYYYMM(如201511,当有关于特定一天没有资料)
年月日(如20151101)
我有问题排序,becouse当我试图解决该列...
$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']);
}
}
...然后我可以做asort($dates)
...
// input values: 2015, 2016, 201511, 20151101
// example output with correct sorting:
Array
(
[1] => 20150000
[0] => 20151100
[3] => 20151101
[2] => 20160000
)
...但我好奇的是有办法使用mysqli查询只排序date_of_premiere
。
我想这将是一个有点复杂来实现。我发现[这里](http://stackoverflow.com/questions/28640428/find-actual-data-type-in-mysqli)MySQLi中有datetime列类型。也许用它代替INT会是个好主意?我知道你并不总是知道完整的日期,但你可以添加一些布尔值来指示缺失的信息,并且排序将默认工作:) –
我想,我发现很简单的解决方案。我改变了mysql列的类型为varchar.It似乎现在我可以按照预期排序值:array([1] => 2015 [0] => 201511 [3] => 20151101 [2] => 2016)无论如何,感谢您的帮助:) –