2013-07-01 5 views
2

Я хочу, чтобы отсортировать строки в таблице по колонному «значению», где поле = «порядок», группировка строк по ObjectId:MySQL сортировки строк по рекордным группам

Id | ObjectId | Field | Value 
------------------------------ 
1 | 1  | size | big 
2 | 1  | order | 2 //unsorted 
3 | 2  | size | small 
4 | 2  | order | 1 //unsorted 
5 | 3  | size | medium 
6 | 3  | order | 3 //unsorted 

Ожидаемого результат:

Id | ObjectId | Field | Value 
------------------------------ 
3 | 2  | size | small 
4 | 2  | order | 1 //sorted 
1 | 1  | size | big 
2 | 1  | order | 2 //sorted 
5 | 3  | size | medium 
6 | 3  | order | 3 //sorted 

ответ

0

Вы должны присоединиться к значению поля для размера первого:

select t.* 
from t join 
    (select t.object_id, max(case when field = 'order' then value end) as ordering 
     from t 
     group by t.object_id 
    ) tsum 
    on t.object_id = tsum.object_id 
order by tsum.ordering, t.object_id, id; 

Это назначает тот же «порядок» на все с тем же object_id.

Смежные вопросы