2015-02-09 99 views
0

我的排序與價格數組排序有問題。 下面的實施例的行:通過排序中的第一個元素排序的MySQL排序

1) ;100 
2) ;50 
3) ;50;100;300 
4) ;30;150 

我想通過陣列的第一元件訂購。當我按價格排ASC命令我得到:

1) ;100 
2) ;30;150 
3) ;50 
4) ;50;100;300 

這是錯誤的結果,因爲「100」應該是最後... 我想:

ORDER BY CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(`price`, ';', 2), ';', 1) AS INT(3) ASC 

但還是錯了...任何線索?

+3

你應該規範你的餐桌設計,這本質上會使這個問題消失。 – 2015-02-09 16:00:18

+0

我不能修改這個基地的結構...任何想法改善ORDER? – 2015-02-09 16:02:15

回答

1

你非常接近。如果我這樣做,我會用(http://sqlfiddle.com/#!2/f57af/6/0

ORDER BY 0+TRIM(LEADING ';' FROM price) 

該作品以擺脫任何分號,然後(通過0+招)的治療price列的初始字符作爲一個整數,而不是文字。

你也可以做

ORDER BY 0+SUBSTRING_INDEX(SUBSTRING_INDEX(val,';',2), ';', -1) 

ORDER BY CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(val,';',2), ';', -1) AS INTEGER) 

你有兩個問題。首先,您的外部SUBSTRING_INDEX操作需要-1的第三個參數。其次,你投了INTEGER,而不是INT(3)

+0

非常感謝你! – 2015-02-09 21:15:09