2012-02-14 22 views
2

タイムスタンプと列挙型(主注文タイムスタンプ、 "サブオーダー"列挙型)の両方で並べ替えを試みていますが、どちらか一方しか動作していないようです。タイムスタンプと列挙型によるMySQLの並べ替え順序

は、それは非常に単純なテーブルは、tableと呼ばれています:

id | task | date_estimated [timestamp] | status [enum]

私が試した:

、理論的には、私のサブソートされている何かを与える必要があり、

select * from table order by date_estimated DESC, status DESC

を日付ごとの列挙ステータス、右?

 
3/5/2012 
added - gas up 
done - buy milk 
done - buy pencils 

しかし、それは私が最初のケースのようにソートするクエリを記述するにはどうすればよい

 
3/5/2012 
done - buy milk 
added - gas up 
done - buy pencils 

のような寄せ集めを与えていますか?

答えて

2

てみ

select * from table order by DATE(date_estimated) DESC, status DESCあなたは奇数次を取得したいので、あなたが持っているだろうイベントを考慮し、実際の日付の部分を探していた場合は、タイムスタンプフィールドは、時間/分/秒を含ん

サブグループがクエリ内で意味を成立させるためには、同じ秒で発生する必要があります。

+0

Date()はまさにそれを修正したものでした。今、彼らは最初に日付順に並べ替えられ、列挙型でサブオーダーされています!これは、奇妙な欲求不満の1時間後の解決策でした。ありがとうございました! – ina

+0

喜んで助けてください。複数のorder bysを使用する場合、最初のorder by orderは、2つ目のorderをキックするために、複数の値が結果セットに複製されなければならないことに注意してください。 – methodin

1

チェックMySQLのドキュメントからこの段落:

ENUM値は列挙 メンバーが列仕様にリストされた順序に従ってソートされています。たとえば、 'a' はENUM( 'a'、 'b')では 'b'の前にソートされますが 'a'の前には 'b'のソートが行われます。 ENUM( 'b'、 'a')の場合空の文字列は空でない文字列の前にソートされ、 NULL値は他のすべての列挙値の前にソートされます。 予期しない結果を防ぐには、ENUMリストをアルファベット順に指定してください。また、 は、ORDER BY CAST(col AS CHAR)またはORDER BY CONCAT(col)を使用して、 をインデックス番号ではなく語彙的にソートすることができます。

各列挙型の値は、数値(インデックス番号)にマッピングされ、ソート時に使用される値です。そのため、結果の文字列表現ではソートされません。

http://dev.mysql.com/doc/refman/5.0/en/enum.html

+0

しかし、それが列挙型の整数でソートされている場合、「追加済み」には追加済みの「完了済み」と完了済みのものが表示されます。代わりに、2つの組み合わせです。 – ina

+0

ええ、確かに、私は "done - buy milk"は単なる価値だと思った。 – Vache

関連する問題