php - 以hms格式排序时间的Mysql查询

标签 php mysql sorting

我正在尝试根据视频的时间对 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 检索该值并将其格式化为用户可读的方式。

我现在建议的是创建一个名为“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

大功告成。

干杯

关于php - 以hms格式排序时间的Mysql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31488728/

相关文章:

mysql - 建议的报价数据库架构

c++ - 双向插入排序错误

php - 对 SimpleXML 对象数组进行排序

python - 为什么 Python 排序将大写项目放在第一位?

php - laravel 5.2 Controller 中的全局变量

php - 用于自定义 html 输出的 Wordpress 编辑器简码

php文件中的php处理/变量生成标记的xml文件

php - 如何在不在php中插入每个循环的情况下将数组插入数据库

php - angular.js View 返回空白页

php - 复杂的sql连接查询