2012-03-08 3 views
0

私はUNIXの時刻フィールドに基づいてMySQLレコードをソートする必要があります。ただし、一部のレコードでは時間の代わりに1の値が保持されます。ここで私は、現在の時間を想定し、それらをソートする方法のは125です:あなたが見ることができるように時刻に基づく複雑なMySQL SORT

127 
130 
132 
133 
1 
1 
1 
1 
124 
122 
119 

は、トップセクションは最初最も早い時間と時間フィールドによってASCの順に記録され、これらはすべてのレコードが続いています適切な時間の代わりに1でマークされ、過去のレコードがDESCの順番でマークされます。これは実行可能ですか?

+0

おそらく2つの別々のクエリを使用して、順序が変更されたことを考慮してください。 – 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
1つの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

申し訳ありませんが、私はほとんどMySQL ORDER BYと連携していましたので、PHPなしでも実行できます。上記の他の答えを見てください。あなたの助けをありがとう。 – 0pt1m1z3

関連する問題