一覧(ページングあり)データを取得する時に、順序用カラムがNULLの場合はNULLが先に来て、1番データ、2番データ・・・と続きます。
NULL値を数値のあとに表示させたいって場合はどうするのか、というのを調べると、
MySQLでは ORDER BY に IS NULL を指定すれば可能
です。
例を挙げるとこんな感じ。
sort_order カラムに、順序用数値があるとします。
| 1 | SELECT * FROM members ORDER BY 'sort_order' IS NULL, 'sort_order' ASC; | 
で、これをCakePHP2.3.6で指定しようとすると、多分、こう書けばOK・・・。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | $order = array(   'Member.sort_order' => 'IS NULL',   'Member.sort_order' => 'ASC', ); $this->paginate = array(     'Member' => array(         'conditions' => $conditions,         'limit'      => $limit,         'order'      => $order,         'recursive'  => -1,     ) ); | 
だと思ったのですが、全然うまく行きません。
‘Member.sort_order’ => ‘ASC’ の方はSQLとして認識してくれるのですが、 IS NULL の方はさっぱり。
何でやなんでやとあれこれやった結果、以下の書き方ではうまくいきました。
| 1 2 | // NULLを後にする場合は、配列ではなく文字列で指定! $order = 'Member.sort_order IS NULL, Member.sort_order ASC'; | 
SQL文を文字列で渡すと正常動作。
結果を見た時、マジで吹き出しました。
なんなんだそりゃ。
普通は配列で渡すと思うやん! 数時間費やしてしまいましたよ・・・。
結論
// NULLを後にする場合は、配列ではなく文字列で指定!
[tgAmazonItemLookup asin=”B00646YVTK” related=”1″]

 
         
         
         
         
         
         
         
         
         
         
         
         
         
         
  
  
  
  
