我在使用价格数组按行排序表时遇到问题。 以下示例行:
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
但还是错了......有什么线索吗?
最佳答案
你们很接近。如果我这样做,我会使用 ( 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)
。
关于php - MySQL 按行中数组的第一个元素排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28413867/