2012-04-11 16 views
0

この質問は私の前の質問 - MySQL query to show records with current date on top and others as per descending orderに関連しています。次のように私は今、MySQLのクエリレコードを注文する

SELECT b.sales_id,b.category_id,b.sale_starts,b.sale_ends 
FROM tbl_sales b WHERE b.active=1 
UNION 
SELECT b.sales_id,b.category_id,b.sale_starts,b.sale_ends 
FROM tbl_sales b INNER JOIN tb_category c ON b.category_id=c.cat_id 
WHERE c.cat_keyword LIKE 'a' 
ORDER BY IF(sale_ends = DATE(NOW()), 0, 1), sale_ends DESC 

を使用して、結果が返されるクエリは、

sales_id  | category_id   |sale_starts | sale_ends 
    ----------|---------------------|------------|-------------- 
    4  | 12    | 2012-04-05 | 2012-04-11 (today's date) 
    1  | 10    | 2012-03-31 | 2012-04-30  
    2  | 11    | 2012-03-22 | 2012-04-27 
    3  | 25    | 2012-03-31 | 2012-04-25 
    5  | 18    | 2012-04-05 | 2012-04-09 
    6  | 20    | 2012-02-23 | 2012-02-27 
    7  | 14    | 2012-02-25 | 2012-02-26 

である。しかし、今、私は別の問題で立ち往生していると私は、以下に示すようにレコードをソートする必要があります -

sales_id  | category_id   |sale_starts | sale_ends 
     ----------|---------------------|------------|-------------- 
     4  | 12    | 2012-04-05 | 2012-04-11 (today's date) 
     3  | 25    | 2012-03-31 | 2012-04-25 
     2  | 11    | 2012-03-22 | 2012-04-27 
     1  | 10    | 2012-03-31 | 2012-04-30 
     7  | 14    | 2012-02-25 | 2012-02-26 (expired/past dates) 
     6  | 20    | 2012-02-23 | 2012-02-27 
     5  | 18    | 2012-04-05 | 2012-04-09 

私は、クエリ内のASCの代わりDESCを使用してみましたが、その後期限切れの日はちょうど今日の日付の後に記載されています。私は、今日の日付の後にリストアップされる将来の日付を必要とし、その後は期限切れの日付しか必要としない。これはどのように実装できますか?

ヘルプが必要です。事前に感謝します

答えて

3

ORDER BYは、左から順に各条件を処理します。あなたが必要な注文のようなものであれば、「今日の日付を持つすべてのエントリは、日付の昇順に、日付の昇順で、将来的にすべてのエントリ、他のエントリは、」あなたはこの

ORDER BY (sale_ends=CURDATE()) DESC,(sale_ends>CURDATE()) DESC,sale_ends ASC 

ような何かを行うことができます最初の2つがDESCとしてリストされているのは、条件が真であれば1に、偽であれば0に評価されるからです。真の条件が最初に必要なので、あなたはDESCendingの順序でそれらを注文する必要があります。

+0

もう一度、この目的に役立ちました。 –

1

私は何かを誤解しているかもしれませんが、これはあなたが探しているものではありませんか?

order by sale_ends < curdate(), sale_ends 

フィドールhere

+0

お試しいただきありがとうございます –