EC-CUBEでNULL(未入力)が最後になるようソートするのって、少し難しいですよね?

MySQLではNULLは最小の値として扱われるという仕様があり、通常rankをASCで並び替えるとNULL→1→2というようにソートされます。

一方、PostgreSQLの場合は「NULL LAST」がデフォルトですので、rankをASCで並び替えると1→2→NULLという順番でソートされます。

MySQLで昇順かつ、NULLを最後に持ってきたい時のクエリビルダはCASE文を用いて次のようになります。

            $qb
                ->addSelect('(case when p.rank IS NULL then 1 else 0 end) as HIDDEN rank_is_null ')
                ->orderBy('rank_is_null', 'ASC')
                ->addOrderBy('rank', 'ASC');;

rank_is_nullはrankがNULLの場合は1になり、NULLでない場合は0になります。
HIDDENなカラムをSELECTし、最初にorderByするのがポイントです。

これで項目がNULLの場合(=未入力)最後に持ってくるようソートができました。
CASE文が苦手が方もいると思いますが、これを期にマスターください!

日本発!ECオープンプラットフォーム「EC-CUBE」 EC-CUBEゴールドパートナー EC-CUBEは株式会社イーシーキューブの商標です

EC-CUBEカスタマイズに関するお問い合わせはこちら


    [重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。

    EC-CUBEバージョンアップ