繁体   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