复杂的MySQL SORT基于时间

时间:2012-03-08 10:53:27

标签: php mysql sorting select mysqli

我必须根据unix时间字段对MySQL记录进行排序。但是,某些记录的值为1而不是时间。假设当前时间为125:

,这就是我希望它们排序的方式
127
130
132
133
1
1
1
1
124
122
119

正如您所看到的,顶部是按时间字段的ASC顺序记录,最早的时间是最早的,然后是所有标记为1而不是正确时间的记录,然后记录来自以DESC顺序过去。这可行吗?

2 个答案:

答案 0 :(得分:2)

您可以使用以下代码执行此操作:

drop table if exists numbers;
create table numbers ( value int );
insert into numbers values 
(119),(122),(124),(127),(130),(131),(1),(1),(1),(1);

select 
    value 
from numbers
order by if( value = 1, 125, if( value > 125, 99999 - value, value ) )  desc

产生:

value
-----
127
130
131
1
1
1
1
124
122
119

Jus用当前时间替换所有出现的125和'99999'具有您在表中可能遇到的最大时间值。

答案 1 :(得分:0)

不确定一个mysql查询,但我已尝试过php和mysql两者,所以试试这个希望它可以帮到你

假设表名为测试,字段名称为日期和时间为125

    $get_latest = mysql_query("SELECT * FROM `test` WHERE time > 125 ORDER BY time ASC");
while($row = mysql_fetch_assoc($get_latest))
{
    $result[] = $row['time'];
}
$get_remaining = mysql_query("SELECT * FROM `test` WHERE time <= 125 ORDER BY time ASC");
while($row1 = mysql_fetch_assoc($get_remaining))
{
    $result[] = $row1['time'];
}

foreach($result as $r)
{
    echo $r.'<br />';
}