[英]Mysql query for sorting Time in hms format
我正在嘗試根據視頻的時間降序對Mysql中的數據進行排序。
我的數據庫中有Video_Duration列,其中以hms格式(例如1h54m3s,9m3s,0m3s)存儲視頻的時間。
當我嘗試使用下面的查詢對數據庫進行排序時,我得到的輸出是9m0s,首先是9m0s,而不是更多的時間(例如1h35m29s)。
我正在使用以下查詢對數據庫進行排序
$sql = "select * from videos where Category_Name='$category' ORDER BY Video_Duration DESC limit 50";
你們能幫我解決問題嗎
不幸的是,您的數據沒有以最佳方式保存到數據庫中。 varchar是可排序的,但遵循字母順序的規則。 例如,如果我想用以下命令訂購前12個數字:
SELECT TOP 12 value
FROM number_in_order
ORDER BY value ASC
我將獲得如下內容:
0
1
10
11
2
3
4
5
6
7
8
9
那是錯的。
處理視頻文件長度的正確方法是使用INT字段來存儲秒數,然后通過php THEN檢索該值並以用戶可讀的方式對其進行格式化。
我現在建議的是創建一個稱為“ NEW_VIDEO_DURATION”的新列,該列將是一個INT,然后在PHP中使用一個簡單的例程從varchar列中讀取數據,並以秒為單位填充正確的值。
您可以執行以下操作來解析您的字符串值:
$stringValue = "1h3m40s";
$h = 0;
$m = 0;
$s = 0;
$splitted = $stringValue.split("h");
if($splitted.length > 0){
$h = $splitted[0];
$splitted = $splitted[1].split("m");
}else{
$splitted = $splitted[0].split("m");
}
$m = $splitted[0];
$s = $splitted[1];
$intValue = ((($h * 60) + $m) * 60) + $s;
現在,在var $ intValue內部,您具有可以存儲在數據庫的新列中的正確時間(以秒為單位)。
轉換所有值后,您可以將舊列刪除為:
ALTER TABLE table_name
DROP COLUMN video_duration
並在以下位置重命名新列:
ALTER TABLE table_name
RENAME COLUMN new_video_duration to video_duration
這樣就完成了。
干杯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.