MySQL заказ по полю (с изюминкой) - PullRequest
3 голосов
/ 18 августа 2010

У меня есть таблица продуктов с названием продукта, двумя полями атрибутов продукта и полем цены.

Проблема в том, что я не могу изменить структуру базы данных. Поля каждого атрибута эквивалентны и могут использоваться оба.

в основном:

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

Не самая лучшая настройка, но так оно и есть ...

Я хочу сделать запрос, который будет делать следующее:

Сначала выведите все синие футболки и упорядочите их по цене. Показать все остальные футболки, упорядоченные по цене после

Я думал что-то вроде упорядочения по полю, но поскольку цвет может быть либо в атрибуте 1, либо в 2, эти поля должны быть эквивалентными.

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 18 августа 2010
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, если ложь, поэтому сортировка по убыванию приведет к сортировке строк, имеющих одно значение атрибута синего цвета.

2 голосов
/ 18 августа 2010
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
...