0

データベースの 2 つの列の結果でデータを並べ替えようとしています。

現在、私のデータのサンプルは次のようになっています。

name   type   state
paul   1      expired
john   3      expired
greg   1      active
jane   3      expired
joan   3      active
judy   2      expired

次のように、最初にアクティブで、次にタイプでデータを表示したいと思います。

name   type   state
greg   1      active
paul   1      expired

joan   3      active
jane   3      expired
john   3      expired

judy   2      expired

私はいくつかの組み合わせを試しました:

ORDER BY type desc, state desc

これにより、タイプ別に並べ替えることができますが、すべてのアクティブなものを最初に配置することはできません。また、状態とタイプで並べ替えましたが、すべてのアクティブなものが一番上に配置され、その下にタイプ別に並べ替えられます。

どんな提案でも大歓迎です!

答えを見つけようとしているときに、これらの2つの投稿を見てきましたが、これまでのところ運がありませんでした.

MySQLで等しい値をORDER BYする

2 つの (同等に重要な) 列による条件付き MySQL 順序

- - 編集 - -

私が注文した場合

ORDER BY state, type

次の結果が得られます。

name   type   state
greg   1      active
joan   3      active
paul   1      expired
john   3      expired
jane   3      expired
judy   2      expired

----編集2----

私が注文した場合

ORDER BY type, state

途中で期限切れになっている次の結果が得られます。これは、はるかに大きなデータセットの小さなサンプルであるため、アクティブなレコードを最初に表示することに重点を置きたいと考えています。

name   type   state
greg   1      active
paul   1      expired
judy   2      expired
joan   3      active
john   3      expired
jane   3      expired

ご覧いただきありがとうございます。

4

2 に答える 2

3

あなたのORDER BY声明では、アルファベット順で「アクティブ」が「期限切れ」の前にあるため、ASCENDANTで注文する必要があります

編集:そして、あなたが尋ねた正確な出力を得るためORDER BY FIELD(fieldname, '1st val', '2nd val')に、正確な順序をカスタマイズできる which を使用できます:

ORDER BY FIELD(`type`, 1, 3, 2), FIELD(`type`, "active", "expired");
于 2013-10-23T10:06:08.400 に答える