0

たとえば、視覚化したときに[ status | 日付]:

[1|2012/01/06],[2|2011/04/23],[3|2012/02/12],[1|2012/11/26],[2|2012/10/13],[3|2010/03/01],[3|2010/06/27]

ステータスが1の行がステータス'の2と3よりも優先されるように結果を並べ替えてから、それらの'分割された'結果を日付順に並べ替えるにはどうすればよいですか?

ASCでステータスを注文すると、次のようになります。

[1|2012/01/06],[1|2012/11/26],[2|2011/04/23],[2|2012/10/13],[3|2012/02/12],[3|2010/03/01],[3|2010/06/27]

これにより、ステータス'2と3が分離されます。次のような結果セットが必要です。

[1|2012/01/06],[1|2012/11/26],[3|2012/02/12],[3|2010/03/01],[2|2011/04/23],[3|2010/06/27],[2|2012/10/13]

tl; drステータス1またはステータス>1のいずれかで結果を並べ替えたいのですが、どうすればよいですか?

4

2 に答える 2

2

次のことを試すことができます-

ORDER BY IF(status = 1, 1, 2) ASC, date ASC
于 2012-04-13T10:22:07.910 に答える
1

あなたは2つのことを求めているので、これに対して2つのクエリを実行します。意味: status=1 を要求し、1 注文以外のすべてを要求します。

これらは 2 つの別々の質問です。クエリがさらに複雑になります。MySQL は単純なクエリで非常に高速です。これにより、次のような明確なモデル関数も可能になります。

 $Model->getByStatus(1)
 $Model->getByStatus(array(2,3))

さらに、次のような個別の関数を作成することもできます。

 $Model->getPriorityTickets()
 $Model->getNonPriorityTickets()

これにより、ビジネスを実際に説明し、コントローラーがステータスIDについて何も知る必要のない、さらに読みやすいオプションが作成されます。たとえば、getPriorityTickets で、どのレコードが優先されるかを定義する別の方法を次のように指定できます: id=1 OR latest_modified > 2 days ago

于 2012-04-13T10:21:14.600 に答える