2016-03-07 49 views
1

我有一个名为seat表包含以下记录:顺序列

+----+------+ 
| ID | Seat | 
+----+------+ 
| 1 | 1a | 
+----+------+ 
| 2 | 1b | 
+----+------+ 
| 3 | 2a |  
+----+------+ 
| 4 | 2b | 
+----+------+ 
| 5 | 3a | 
+----+------+ 
| 6 | 3b | 
+----+------+ 
| 7 | 4a | 
+----+------+ 
| 8 | 4b | 
+----+------+ 
| 9 | 10a | 
+----+------+ 
| 10 | 10b | 
+----+------+ 
| 11 | 11a | 
+----+------+ 
| 12 | 11b | 
+----+------+ 
| 13 | 12a | 
+----+------+ 
| 14 | 12b | 
+----+------+ 

我想根据第二列seat所以我的表的最后一个字符命令的结果显示:

+----+------+ 
| ID | Seat | 
+----+------+ 
| 1 | 1a | 
+----+------+ 
| 3 | 2a |  
+----+------+ 
| 5 | 3a | 
+----+------+ 
| 7 | 4a | 
+----+------+ 
| 9 | 10a | 
+----+------+ 
| 11 | 11a | 
+----+------+ 
| 13 | 12a | 
+----+------+ 
| 2 | 1b | 
+----+------+ 
| 4 | 2b | 
+----+------+ 
| 6 | 3b |  
+----+------+ 
| 8 | 4b | 
+----+------+ 
| 10 | 10b | 
+----+------+ 
| 12 | 11b | 
+----+------+ 
| 14 | 12b | 
+----+------+ 

我该如何达到这个结果?我应该使用哪些功能?

+1

这显示了数据库设计中的缺陷。您对单独的信息“行”(1,2,3,...)和“行中的座位”(a,b)感兴趣,但是现在您可以存储导致问题的组合值。所以最好的答案可能是:不要试图找到这个查询,而是改变你的数据模型。 –

+0

是的,我在想它。你能指点我一个更好的模型吗? –

+0

'id' +'seat_row' +'seat_place'而不是'id' +'seat'。 –

回答

1

起初,你可以使用right通过的最后一个值订购(即签署),然后施放整体字符串无符号(即,在MySQL中,11a转换为11):

order by right(`seat`, 1), cast(`seat` as unsigned) 

SQLFiddle

+0

谢谢,它工作了一段时间。当我插入十个数值,例如'10a','10b','11a','11b'与上述值混合在一起时,问题就出现了。结果是可怕的错误 –

+0

@AnggieAriWidhia:更新 – potashin

+0

解决了,我使用这个'选择*从'总线'顺序右(座位,1),CAST(座位AS无符号)'。首先,我根据记录的最后一个字母对列进行排序,然后对它们进行数字排序。 –