我有一个varchar
类型的字段,用于存储格式为HH:MM:SS
的字符串,即 01:25:59 (有时没有 HH 部分例如 25:59 )。
我想根据这个时间有一个降序的结果,因为我带有[str_to_date()][1]
函数,目前我正在使用str_to_date($field_value,'%l:%i:%s') DESC
来实现这种排序。
奇怪的是,使用此格式%l:%i:%s
所有以MM:SS
格式显示此字段的帖子都会正确排序,但HH:MM:SS
中的字段不是。
1 - 如果我有这些值:
11:35
15:20
48:00
01:57:47
01:20:26
2 - 它们分类为:
48:00
01:20:26
15:20
11:35
01:57:47
3 - 哪个错了,应该是:
01:57:47
01:20:26
48:00
15:20
11:35
如您所见( 2 ),HH:MM:SS
格式的唯一时间未正确放置( DESC )
我怎样才能进行正确的排序?
答案 0 :(得分:2)
这个怎么样?
SELECT * FROM tbl
ORDER BY TIME_TO_SEC(IF(LENGTH(str_time)<6,CONCAT("00:",str_time),str_time)) DESC
答案 1 :(得分:1)
这是您的查询:
$rate=$data['slider1'];
$key =array_keys($data['sub']);
//print_r($key);
$pricing2 = $data['slider1'];
$pricing = $pricing2 * 1.15;
$postcode = $data['postcode'];
$bindings = array();
$bindings[] = array(":pricing", $pricing, PDO::PARAM_STR);
$bindings[] = array(":distance", $postcode, PDO::PARAM_STR);
$key_placeholders = array();
foreach($key as $k => $v) {
$placeholder = ":subid".$k;
$bindings[] = array($placeholder, $v, PDO::PARAM_INT);
$key_placeholders[] = $placeholder;
}
$sql = "SELECT Name,PostUUID,pricing,Poscode , ABS( Poscode - :distance ) AS distance,subname,Reputation,ReviewPlus,ReviewNeg,week_morning,week_afternoon,week_evening,weekend_morning,week_afternoon,week_evening,weekend_morning,weekend_afternoon,week_evening,weekend_morning,weekend_afternoon,weekend_evening,date,Phone,Sex,UUID,catname FROM posts,subjects,categories "
. "WHERE posts.subid IN (". implode(",",$key_placeholders).") "
. "AND posts.pricing <=:pricing "
. "AND posts.Poscode =:distance "
. "AND posts.subid=subjects.subid "
. "AND subjects.catid=categories.catid "
. "ORDER BY distance "
. "DESC LIMIT 100";
$statement = $pdo->prepare($sql);
foreach($bindings as $b) {
$statement->bindValue($b[0],$b[1],$b[2]);
}
$statement->execute();
答案 2 :(得分:0)
想在应用方面做些什么?有点长,但它的工作原理。
$tim_arr = array ('11:35', '15:20', '48:00', '01:57:47', '01:20:26');
$new_arr = array();
foreach ($tim_arr AS $tim){
$tim_chk = $key = '' ; $ntim_arr =array();
$tim_chk = substr_count($tim, ":");
$ntim_arr = explode(':',$tim);
if($tim_chk == 2){
$ntim = ( (int)$ntim_arr[0]*60 + (int)$ntim_arr[1] ).':'.$ntim_arr[2];
$key = ( (int)$ntim_arr[0]*60 + (int)$ntim_arr[1] );
}
else{
$ntim = $tim;
$key = $ntim_arr[0];
}
$new_arr[$key] = $ntim ;
}
krsort($new_arr);
foreach ($new_arr AS $tim)
{
$ntim_arr = explode(':',$tim);
if((int)$ntim_arr[0] >= 60){
echo str_pad(floor($ntim_arr[0] /60),2,"0",STR_PAD_LEFT).":".
str_pad($ntim_arr[0] %60,2,"0",STR_PAD_LEFT).":".$ntim_arr[1]."<br/>";
}
else{
echo $tim."<br/>";
}
}