2012-12-12 72 views
1

我有一个包含多个列的表,其中四个只是泛型整数值(num1,num2,num3,num4),数据源以随机顺序包含这些值。在PHP中,我将获取该行,将四个整数分配给一个数组,对数组进行排序,并将排序的值分配回来并保存该行。我想用sql做到这一点。因此,与像Mysql - 用sql重新排列列值

id, num1, num2, num3, num4 
1 6  2 9  1 
2 12  3 8  4 

表...

我想结果是

id, num1, num2, num3, num4 
1  1  2  6  9 
2  3  4  8 12 

...

我用Google搜索一切我能想到的冲刷Mysql ref手册,但似乎无法找到一种方法来做到这一点。任何想法,或者我应该只写一个PHP脚本?

回答

0

嗯,这是一个UNPIVOT,排序和枢轴,但去年我在mysql中没有听到这样 也许

Set @position = 0 
CREATE TEMPORARY TABLE OrderedUnpivot AS (
    Select Id,@position = @position + 1, @position % 4 as Position, Value From 
    (
    Select Id,Position,Value From 
    (
     select Id, 1 as Position, num1 as Value 
     Union 
     select Id, 2, num2 
     union 
     select Id, 3, num3 
     union 
     select Id, 4, num4 
    ) depivot 
    Order by Id, Value 
) 
Select ID,V1.Value as Num1, V2.Value as Num2, V3.Value as Num3, V4.Value as Num4 
From OrderedUnpivot v1 
Inner join OrderedUnpivot v2 ON v1.Id = v2.ID 
Inner join OrderedUnpivot v3 ON v1.Id = v3.ID 
Inner join OrderedUnpivot v4 ON v1.Id = v4.ID 

麻烦但回味无穷,哦,不测试,甚至语法检查。