4

データベースで次のクエリを使用しています。

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 assale_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

よろしくお願いします。

4

2 に答える 2

5

この ORDER BY 句を条件付きで試してください -

ORDER BY IF(sale_ends = DATE(NOW()), 0, 1), sale_ends DESC
于 2012-04-11T06:17:10.170 に答える
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
于 2012-04-11T06:16:38.883 に答える