MySQL(マイエスキューエル)

MySQLのCASE文

現在、簡単な掲示板のようなシステムを作成しているのですが、

その際に少しつまずいたので、

記録がてら情報をまとめておくことにしました。

 

今回はお客さんからの要望で、掲示板に記事を投稿する際に、

・ステータスフラグ(0:公開保留 1:公開中)
・記事の公開開始日
・記事の公開終了日

という項目を持たせることになりました。

 

ただ、お客さんから、

管理画面から記事を検索した場合に、

記事の検索結果一覧には、

「ステータスフラグ」に「0」が立っている場合 => 公開保留
「ステータスフラグ」に「1」が立っている かつ 当日が「公開開始日」と「公開終了日」の間の場合 => 公開中
「ステータスフラグ」に「1」が立っている かつ 「公開開始日」がまだ来ていない場合 => 公開前
「ステータスフラグ」に「1」が立っている かつ 「公開終了日」が過ぎてしまっている場合 => 公開終了

と表示させてほしいとの要望が。。。

 

表示させるだけであれば、プログラム側でそのように処理してやればいいだけなので問題ないのですが、

更にその順番にソート出来る機能を付けて欲しいとのこと。。。

 

「ステータスフラグ」には「0」と「1」しか存在しません。

 

その為、「ステータスフラグ」でソートしても「公開中」「公開前」「公開終了」の並びがバラバラになってしまいます。

 

そんな時に便利なのがCASE文です。

 

↓これ↓
=========================
CASE
WHEN 条件1 THEN 処理
WHEN 条件2 THEN 処理
WHEN 条件3 THEN 処理
...
ELSE 処理
END
=========================

 

今回の場合であれば、

・ステータスフラグ => カラム名:openStatus

・記事の公開開始日 => カラム名:openStart

・記事の公開終了日 => カラム名:openEnd

だったとすると、

 

ORDER BY句はこんな感じになります↓↓
===============================================================================
ORDER BY CASE
WHEN (`openStatus` = 0) THEN 0
WHEN (`openStatus`=1) and (`openStart`<='当日') and (`openEnd`>='当日') THEN 3
WHEN (`openStatus`=1) and (`openStart`>'当日') THEN 4
WHEN (`openStatus`=1) and (`openEnd`<'当日') THEN 5
ELSE 6 END ASC
===============================================================================
※降順に並べる場合には「ASC」を「DESC」にすればOK!

 

なので、今回の案件であればこんなSQLを書いてやれば対応可能です。
===============================================================================
SELECT 取得したいカラム名 FROM テーブル名 WHERE 条件
ORDER BY CASE
WHEN (`openStatus` = 0) THEN 0
WHEN (`openStatus`=1) and (`openStart`<='当日') and (`openEnd`>='当日') THEN 3
WHEN (`openStatus`=1) and (`openStart`>'当日') THEN 4
WHEN (`openStatus`=1) and (`openEnd`<'当日') THEN 5
ELSE 6 END ASC
===============================================================================

この記事を書いている人
株式会社ディープ
名前足立拓也

メールアドレスadachi@deep-deep.jp

関連記事

最近の記事

  1. レンタルサーバ:おすすめの共用サーバ
  2. ホームページ(homepage)
  3. システムアップデート
  4. エックスサーバー(XSERVER)
  5. エックスサーバー(XSERVER)
  6. エックスサーバー(XSERVER)
  7. WEBサイト構築
  8. スパム(SPAM)対策
  9. サイト公開
  10. ネームサーバーの登録

Twitter

ダッチ(足立拓也)
@gatsu0000

  • RT @goens69732829: 明日は譲渡会です‼️‼️‼️ 今年最後の譲渡会はたくさんの猫ちゃんが参加🥰 皆さん拡散の応援宜しくお願い致します‼️ 12月8日(日) 時間:11:00〜15:00 場所:いなげビレッジ虹と風 虹の棟 2F 会議室・宙 (千葉市稲毛…
    about 1日 ago via Twitter Web App

アーカイブ

PAGE TOP