mysql按字段排序(带扭曲)

时间:2010-08-18 16:30:00

标签: mysql sql-order-by

我有一个产品表,其中包含产品名称,两个产品属性字段和一个价格字段。

问题在于我无法改变数据库的结构方式。每个属性字段都是等效的,可以使用它们。

基本上:

 NAME      | ATTRIBUTE_1 | ATTRIBUTE_2 | PRICE
 Tshirt    | red         | small       | 25
 Tshirt    | medium      | red         | 20
 Tshirt    | blue        | medium      | 30
 Tshirt    | blue        | large       | 16

不是最好的设置,但它就是这样......

我想执行以下操作的查询:

首先显示所有蓝色T恤,然后按价格订购

之后显示所有其他按价格订购的T恤

我正在考虑按字段排序,但由于颜色可以在属性1或2中,因此这些字段必须是等价物。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

SELECT NAME, ATTRIBUTE_1, ATTRIBUTE_2, PRICE
FROM products
ORDER BY (ATTRIBUTE_1 = 'blue' OR ATTRIBUTE_2 = 'blue') DESC, PRICE

(ATTRIBUTE_1 = 'blue' OR ATTRIBUTE_2 = 'blue')如果为1,则为0,如果为false,则按降序对其进行排序将首先对具有一个属性值为蓝色的行进行排序。

答案 1 :(得分:2)

select name, attribute_1, attribute_2, price
from Product
order by 
    case 
        when ATTRIBUTE_1 = 'blue' or ATTRIBUTE_2 = 'blue' then 0 
        else 1 
    end, 
    price