2013-11-29 55 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整數的值。如果這不起作用,請創建一個提示問題的小提琴。 –