MySQL分段订购

vma*_*tto 3 mysql sql sql-order-by mysql4

我有这样的数据集:

boolean name    value
0       Text10  20
1       Text1   8
0       Text4   46
1       Text9   84
1       Text5   66
0       Text2   35
0       Text9   2
1       Text6   55
Run Code Online (Sandbox Code Playgroud)

boolean列排序会将数据拆分为两个部分,我想根据每个不同的参数boolean = 1进行排序:具有按值排序的部分,其余的按顺序排序name,如下所示:

boolean name    value
1       Text1   8     # --> 1s are ordered by value
1       Text6   55
1       Text5   66
1       Text9   84
0       Text2   35    # --> 0s are ordered by name
0       Text4   46
0       Text9   2
0       Text10  20
Run Code Online (Sandbox Code Playgroud)

注意:我们需要在MySQL 4.1.11中使用它.= d

Lui*_*uot 9

请注意,可以根据需要对其中的多个部分order by进行"激活".
你可以查看这个sqlfiddle

select * from yourtable
order by 
  boolean desc, 
  case when boolean = 0 then value else null end, -- ´else null´ is redundant
  case when boolean = 1 then name  else null end  -- but is here to clarify
Run Code Online (Sandbox Code Playgroud)