2010-09-22 109 views
4

我想使用CakePHP拉的照片陣列從一個數據庫,通過照片標題排序(0,1,2,3 ...)我的查詢目前看起來像:CakePHP查找 - 按String-To-Int?

$ss_photos = $this->Asset->find('all',array(
    'conditions'=>array('kind'=>'photo'), 
    'order'=>'title' 
)); 

不幸的是,冠軍似乎是字符串格式,導致不良的排序順序(19.jpg之後的2.jpg等)。是否有一種快速的方法來將'標題'作爲int類型在此類型的Cake查詢中進行排序?

+0

N.B.他們是$ ss_photos,因爲他們註定要用於幻燈片放映,而不是因爲他們描繪納粹「Schutzstaffel」成員。有時清楚這些事情是很重要的。 – thesunneversets 2010-09-22 17:21:59

+0

您可以使用['CAST()'](http://dev.mysql.com/doc/refman/5.0/zh/cast-functions.html#function_cast)或'CONVERT()' – NullUserException 2010-09-22 17:35:32

+0

ORDER BY CAST(title AS INT)或類似的工具大概可以在MySQL中工作,只是在思考如何最好地將它集成到CakePHP查詢中! – thesunneversets 2010-09-22 17:40:08

回答

2

不知道這是「建議的做法」,但在第一次通過它似乎工作:

$ss_photos = $this->Asset->find('all',array(
    'conditions'=>array('kind'=>'photo'), 
    'order'=>'Asset.title + 0' 
)); 

任何意見?

+0

謝謝,效果很好。 – 472084 2013-06-25 14:33:44

+0

'order'=>'CAST(title AS INT)'也很好,但是(我剛剛在部署代碼後發現)只有MySQL 5.6或同等版本。在舊版本上使用CAST AS SIGNED – savedario 2017-06-09 08:19:45

0

解決方案是創建一個隱藏的列,它負責您的示例圖像名稱中的命令應該是:00002.jpg,00019.jpg - 這樣訂單才能正常工作。

如果結果不是太多,我認爲在PHP中對它們進行排序更容易(如果你使用它當然:))看到這個natsort()你只需要提取圖像列表並對它們進行排序。

+0

如果Cake在我的查詢過程中遇到重寫類型的麻煩,那麼在PHP中排序確實可能是最省力的解決方案... – thesunneversets 2010-09-22 17:43:34