2012-03-08 2 views
0

유닉스 시간 필드를 기반으로 MySQL 레코드를 정렬해야한다. 그러나 일부 레코드는 시간 대신 1의 값을 보유합니다. 저는 여기에 현재 시간을 가정하고,이를 정렬 할 방법 것은 125 : 당신이 볼 수 있듯이시간에 따른 복잡한 MySQL SORT

127 
130 
132 
133 
1 
1 
1 
1 
124 
122 
119 

는, 맨 위 섹션이 먼저 조속한 시간 시간 필드에 의해 ASC 순서로 기록이며, 이들은 모든 레코드가옵니다 적절한 시간 대신 1로 표시 한 다음 과거의 레코드를 DESC 순서로 표시합니다. 이게 가능합니까?

+0

어쩌면 두 개의 개별 쿼리를 사용하여 순서가 변경되었다고 생각합니다. – mishu

답변

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'를 대체합니다.

+0

그래서 가장 큰 가치는 MAX를 할 수 있습니까? – 0pt1m1z3

+0

MAX()가 작동하지 않았지만 큰 숫자 (3000000000)를 추가하고 그 값을 빼면 매력처럼 작동합니다. 감사. – 0pt1m1z3

0
하나의 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 />'; 
} 
로 날짜와 시간 등의 테스트 및 필드 이름으로 테이블 이름을 가정 당신에게

도움이 희망을 시도 PHP와 MySQL 뭔가를 시도했다

+0

죄송합니다. PHP가 없어도 할 수 있다는 것을 알았 기 때문에 MySQL ORDER BY와 거의 작업했습니다. 위의 다른 답변을 참조하십시오. 그래도 도와 ​​줘서 고마워. – 0pt1m1z3

관련 문제