mysql排序名称和数字

时间:2017-09-27 09:02:15

标签: mysql sorting

表格看起来像这样

<input 
    type="number"
    ng-model="validNumber"
    required
    min="10"
    max="20" 
    ng-model-options="{ allowInvalid: true }"
    />

但在尝试使用

进行排序时
ID    |    name
----------------
1     | season 1 episode 1
1     | season 1 episode 2
1     | season 1 episode 3
*     | *
*     | *
1     | season 1 episode 10
1     | season 2 episode 1
1     | season 2 episode 2
1     | season 2 episode 3
*     | *
*     | *
1     | season 2 episode 10
2     | season 1 episode 1
2     | season 1 episode 2
2     | season 1 episode 3
*     | *
*     | *
2     | season 1 episode 10
*     | *

表格按错误的顺序对10,11,12等进行排序

2 个答案:

答案 0 :(得分:0)

您会看到此结果,因为它排序字符串,而不是整数。所以它分别检查每个角色。首先采用10中的1,并且因为1小于2,所以在2之前对其进行排序,即使其自身发生2也是如此。只有这样才能进入0.它不知道你打算将它作为一个数字。这只是起作用,因为字符串的其余部分总是相同的长度。如果你开始有第10季等,它可能会变得更糟。

解决方案是将您的名字字段分成两个整数字段 - &#34; season&#34;和#34;插曲&#34;。只需填写相关数字即可。剧集通常有一个单独的描述性标题,如果你有,你可以在字符串字段中保存。

然后,您可以在查询中执行ORDER BY season, episode,以便按正确的顺序获取它们。如果您希望向用户显示当前名称字段中显示的文字,则可以在查询中执行SELECT "season" + CAST(season as CHAR(50)) + " episode " + CAST(episode as CHAR(50))之类的操作。

答案 1 :(得分:-1)

试试这个

SELECT * FROM `episodes` ORDER BY `ID`, CHAR_LENGTH(`name`)