簡體   English   中英

MySQL查詢以hms格式排序時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM