簡體   English   中英

如何訂購和選擇條件查詢

[英]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

任何幫助歡迎

代替:

ORDER BY price ASC

采用:

ORDER BY IF(price = 0, 1, 0), price ASC

在這里演示

假設您要按價格升序進行訂購,除非價格為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

如果結果分別為falsetrue ,則ORDER BY子句中的Price = 0條件將返回值01 默認情況下,它將按升序排序。

因此,等於0Price = 0Price = 0條件下的結果為1 (true) ,並且由於1 (true)大於0 (false)而將其放在最后一行。

請參閱SQL Fiddle示例

即使Price的數據類型為DECIMAL ,將其等於00.00也會按所需順序排序。

看看這另一個SQL Fiddle示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM