$sql="SELECT * FROM stoc WHERE tip='$t' ORDER BY codint ASC LIMIT $offset, $rec_limit";
结果是
Acer1
Acer10
Acer11
Acer12
Acer2
我想要
Acer1
Acer2
Acer10
Acer11
Acer12
想法?
答案 0 :(得分:0)
尝试按照列的长度和自己的列来排序。
SELECT * FROM stoc WHERE tip='$t'
ORDER BY LENGTH(codint),codint LIMIT $offset, $rec_limit"
如果存在其他字符串而不是Acer...
,则可能会出现问题。
如果它们确实存在,我认为您需要将字符串拆分为字符串和数字,然后order by string,number
答案 1 :(得分:0)
我已经修好了。它得到最后一位数字并按顺序排列:http://rextester.com/OWE75092
SELECT `temp`,
convert(
right(
`temp`,
CHAR_LENGTH(`temp`) - Least(
Locate('0',concat(`temp`, '0')),
Locate('1',concat(`temp`, '1')),
Locate('2',concat(`temp`, '2')),
Locate('3',concat(`temp`, '3')),
Locate('4',concat(`temp`, '4')),
Locate('5',concat(`temp`, '5')),
Locate('6',concat(`temp`, '6')),
Locate('7',concat(`temp`, '7')),
Locate('8',concat(`temp`, '8')),
Locate('9',concat(`temp`, '9'))
) +1 ), UNSIGNED INTEGER) as myInt
FROM Table1
order by myInt;
答案 2 :(得分:0)
我在这里找到了 function 来移除非数字字符
我很容易复制创建克隆以删除数字字符,更改:
IF SUBSTR(as_val,i,1) NOT IN ....
^^^^^^
<强> DEMO 强>
SELECT `t`,
uf_no_digits(`t`) as name,
CONVERT(uf_only_digits(`t`), SIGNED) as ID
FROM Table1
ORDER BY name, ID
<强>输出强>
答案 3 :(得分:0)
SELECT 'A2' x UNION SELECT 'A11' ORDER BY x;
+-----+
| x |
+-----+
| A11 |
| A2 |
+-----+
SELECT 'A2' x UNION SELECT 'A11' ORDER BY x+0;
+-----+
| x |
+-----+
| A2 |
| A11 |
+-----+