Комплекс MySQL SORT основан на времени - PullRequest
0 голосов
/ 08 марта 2012

Я должен сортировать записи MySQL на основе поля времени Unix.Однако некоторые записи содержат значение 1 вместо времени.Вот как я хочу их отсортировать, предполагая, что текущее время составляет 125:

127
130
132
133
1
1
1
1
124
122
119

Как вы можете видеть, верхний раздел - это записи в порядке ASC по полю времени с самым быстрым временем, за которым следуют всезаписи, помеченные 1 вместо правильного времени, а затем записи из прошлого в порядке DESC.Это выполнимо?

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Вы можете сделать это с помощью следующего кода:

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 'нанаибольшее значение времени, которое вы можете встретить в вашей таблице.

0 голосов
/ 08 марта 2012

Не уверен насчет одного запроса 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 />';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...