2011-12-12 35 views
0

我试图在CakePHP中进行字符串排序,但是我遇到了一些错误。我有类似C.110,C.100.1,...,C.100.8的字符串。在MySQL中使用十进制/字符串排序

当我尝试使用命令:

ORDER BY CAST(plane_accounts.code AS DECIMAL(10,5)) 

的MySQL返回我有些喜欢:

C.110 
C.110.8 
C.110.1 
C.100.2 

有人知道如何解决这个问题?感谢帮助。

+0

这看起来像一个SQL问题,你能发布完整的查询吗? – AlenBer

+0

是否有任何理由不能只使用ORDER BY(plane_accounts.code)?此外,这似乎与CakePHP无关 - 只是一个MySQL问题。如果你得到MySQL的工作,那么如果你不明白如何实现,那么请问一下CakePHP。 – Dave

回答

0

没有必要将其强制转换,在code领域的普通ASC排序应该只是工作:

$this->PlaneAccount->find('all', array(
    'order' => array(
     'PlaneAccount.code' => 'ASC' 
    ) 
)); 

还是在普通的MySQL语法:

SELECT `code` FROM `plane_accounts` ORDER BY `code` ASC; 
+0

嘿,大家,坚持下去。我知道如何使用CakePHP来做到这一点,显然我试图用'ORDER BY plane_accounts.code'来做到这一点。 但是...当我这样做时,返回是: '5,A,B,B.100,C.110,C.110.1,C.110.10,C.110.11,C.110.2,C.110.3' 你现在可以看到问题了吗?我尝试使用CAST来正确排序这些字符串。 –

+0

这仍然不会改变任何东西。如果您只是在代码字段上执行简单的ASC订单,您上面提到的数据仍将按照该顺序排列。否则,你应该更清楚你现在得到的顺序和你的期望。 – Oldskool

+0

FlávioRicardo - 该订单的问题是什么?它看起来正确。每个Oldskool,发布你所得到的以及你希望得到的 - 这将帮助你很快得到你想要的答案。 – Dave