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