2013-11-29 54 views
2

Mysql,检查字段值的变化?如果更改该值则表现出不同的价值Mysql,检查字段值更改?

表:一个

id size name 
    -------------- 
    1 500 abc 
    2 200 bcd 
    3 400 xyz 
    4 500 bbb 
    5 200 aaa 


    select @s:[email protected]+1 as index, id, size, name from a,(SELECT @s:= 0) AS s order by size; 

在这样的查询数据。

index id size name 
    -------------------- 

    1  2 200 bcd 
    2  5 200 aaa 
    3  3 400 xyz 
    4  1 500 abc 
    5  4 500 bbb 

我需要在大小发生变化时获取索引更改。 我想获得这种类型的数据。喜欢。

index id size name 
    -------------------- 

    1  2 200 bcd 
    1  5 200 aaa 
    2  3 400 xyz 
    3  1 500 abc 
    3  4 500 bbb 

回答

2

这应该做的伎俩:

SELECT 
    @s := @s + (@prev_size != a.size) `index`, 
    id, 
    @prev_size := a.size size, 
    name 
FROM a, (SELECT @s := 0, @prev_size := -1) s 
ORDER BY a.size 

输出:

| INDEX | ID | SIZE | NAME | 
|-------|----|------|------| 
|  1 | 2 | 200 | bcd | 
|  1 | 5 | 200 | aaa | 
|  2 | 3 | 400 | xyz | 
|  3 | 1 | 500 | abc | 
|  3 | 4 | 500 | bbb | 

小提琴here

+0

你好,莫斯迪莫斯塔乔。 有些时候索引是以2开头的,为什么? –

+0

例如'a'表中的最后一条记录,其大小为200,然后索引是明星,其他2则明智地以1开头。 是什么原因? –

+1

我已经稍微修改了答案。确保'@ prev_size'被初始化为一个非int整数的值。如果这不起作用,请创建一个提示问题的小提琴。 –