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
===============================================================================

0
この記事を書いている人
株式会社ディープ

名前ダッチ

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

Twitterはこちら >>

  • コメント: 0

関連記事

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

最近の記事

  1. WP:WordPress(ワードプレス)
  2. WP:WordPress(ワードプレス)
  3. WP:WordPress(ワードプレス)
  4. 文系と理系のメリットとデメリット
  5. 東京駅
  6. 残業
  7. プログラマーになるのに年齢は関係ある?
  8. 年収(収入)
  9. income(収入)
  10. プログラマーになろう

Twitter

ダッチ@職業ブロガー兼プログラマー
@gatsu0000

アーカイブ

PAGE TOP