在數據庫中,我有列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)無論如何,感謝您的幫助:) –