[英]How to order and select query with conditions
我有以下查詢:
SELECT * FROM table WHERE some conditions ORDER price ASC
整個查詢要多一些:
SELECT * FROM products WHERE some conditions ";
if (($_GET['Category']) =='X'){
switch( $_GET['price'] ){
case '':
$query_RS_Search .= ' some conditions ORDER BY price ASC';
break;
case '0-500':
$query_RS_Search .= ' some conditions ORDER BY price ASC';
break;
case '500-1000':
etc
break;
}else{switch( $_GET['price'] ){
case '':
$query_RS_Search .= ' some conditions ORDER BY price ASC';
break;
case '0-500':
$query_RS_Search .= ' some conditions ORDER BY price ASC';
break;
case '500-1000':
etc
break; }}
我想做的是相同的查詢,但是價格是0.00,這需要是最后一個而不是第一個。
例如,我有以下產品:
product 1 price £15
product 2 price £25
product 3 price £12
product 4 price £0
我想按以下順序訂購它們:
product 3 £12
product 1 £15
product 2 £25
product 4 £0
但是我得到的順序是:
product 4 £0
product 3 £12
product 1 £15
product 2 £25
任何幫助歡迎
假設您要按價格升序進行訂購,除非價格為0,那么它必須是最后一個。
ORDER BY (CASE WHEN price = 0 THEN 1 ELSE 0 END) ASC, price ASC
如果您的價格包含實際的英鎊符號,那么首先,這不是很好的數據庫設計,但首先,您必須將查詢修改為:
ORDER BY (CASE WHEN price = '£0' THEN 1 ELSE 0 END) ASC, price ASC
這樣,當價格為0且將被升序排列時,只有一個為1的偽字段發生第一優先級排序,這意味着任何價格!= 0將在價格之前先被定價,而price ==0。此后,我們繼續訂購價格上升。 在您的示例中,這將是:
product 3 £12
product 1 £15
product 2 £25
product 4 £0
請記住,這對於任何負價格都將無效。 如果負價格也最后出現,則必須修改CASE語句以應用於price <= 0
。
試試: ORDER BY Price = 0, Price ASC
如果結果分別為false
或true
,則ORDER BY
子句中的Price = 0
條件將返回值0
或1
。 默認情況下,它將按升序排序。
因此,等於0
的Price = 0
在Price = 0
條件下的結果為1 (true)
,並且由於1 (true)
大於0 (false)
而將其放在最后一行。
請參閱SQL Fiddle示例
即使Price
的數據類型為DECIMAL
,將其等於0
或0.00
也會按所需順序排序。
看看這另一個SQL Fiddle示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.