2012-04-11 18 views
4
私は私のデータベースで次のクエリを使用しています

降順ごとに上に現在の日付を持つレコードなどを表示する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 sale_ends DESC 

と、次のように結果を取得し、

sales_id | category_id   |sale_starts | sale_ends 
----------|---------------------|------------|-------------- 
1  | 10    | 2012-03-31 | 2012-04-30  
2  | 11    | 2012-03-22 | 2012-04-27 
3  | 25    | 2012-03-31 | 2012-04-25 
4  | 12    | 2012-04-05 | 2012-04-11 

今すぐ次のように結果を得る必要があります。today's date/current date as sale_endsの行は、注文の最上位に表示する必要があります(現在の日付/現在の日付は2012-04-11と仮定します)。

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

、ORDER BYを使用することができます -

ORDER BY IF(sale_ends = DATE(NOW()), 0, 1), sale_ends DESC 
+1

おかげでたくさんのことを正常に動作します.. –

3

あなたが別のSELECTで全体を包み、条件でこのORDER BY句を試してみてください

SELECT * FROM (  
    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 sale_ends DESC 
) AS all_sales 
ORDER BY (sale_ends=CURDATE()) DESC, sale_ends DESC 
+0

をこれもうまくいきました、ありがとう –

関連する問題