0

私は2つの列を注文できることを知っています

ORDER BY col1 DESC, col2 DESC

例えば。

しかし、私の場合、これはうまくいきません。私は次の日のイベントを表示したいMySQL-Queryを持っていdateますhighlight.

イベントには、TOP-Premium (+++)、Premium (++)、Free (+) の 3 種類のイベントがあるためです。

今度は次のように注文します。

-- <例>

7th May 2013

+FREE EVENT
++PREMIUM
+++TOP PREMIUM
+++TOP PREMIUM

--

8th May 2013
(same here as on 7th May 2013)

-- < / 例の終わり >

ご覧のとおり、次の日付が来るまでに注文します。これは正しいです! しかし、TOP-Premium-Events を一番上に並べ、Premium-Events と少なくとも無料のイベントを並べたいと思います。

私の現在の機能していないクエリの終わりは次のとおりです。

ORDER BY e.`date` ASC, e.`highlight` ASC");

助けや提案をいただければ幸いです。

4

4 に答える 4

3

うーん、

ORDER BY e.date ASC, e.highlight DESC

?

于 2013-05-07T21:12:44.200 に答える
1

ENUM は、宣言にリストされた順序で、内部的に数値として表されます。列を として宣言すると、 as 、as ENUM('2', '1', '0')、およびasとして'2'格納されます。1'1'2'0'3

ORDER BY は、ラベルではなく、これらの内部番号を使用します。内部番号ではなくラベルで注文したい場合は、 を使用する必要がありますCAST()

ORDER BY e.`date` ASC, CAST(e.highlight AS CHAR) ASC

これは、ENUM のラベルとして数値を使用することが通常悪い考えである理由の 1 つです。MySQL のドキュメントでは、これを推奨していません。

于 2013-05-08T15:35:29.703 に答える
1

ORDER BY e.date DESC、e.highlight ASC

于 2013-05-07T21:15:13.743 に答える
1

2 つの列を入れ替えます。最初highlightは日付順、次に日付順です。次のようなシーケンスが得られます。

Top premium: 7th may
Top premium: 8th may
Premium: 7th may
Premium: 8th may
Free: 7th may
...
于 2013-05-07T21:15:52.330 に答える