• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ソートした値をから別の条件でソートしたいのですが・・)

MYSQL5.1で特定の条件でソートする方法について

このQ&Aのポイント
  • MYSQL5.1を利用している際に、特定の条件でソートする方法がわからず困っています。
  • 具体的には、ソート条件を複数指定し、ソート後にさらに別の条件で再度ソートしたいです。
  • 現在のSQL文ではエラーが発生しており、解決策を探しています。皆様のお力添えをお願いします!

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

ちょっとわかりにくかったので一部修正します ORDER BY X ASC,IF(X=2,start_time,0) ASC,start_time DESC

icon_fanta
質問者

お礼

・・・完璧すぎです。 有難うございます!本当に勉強になりました。 正直、それぞれで分けてデータを取得して、その配列を結合するしかないなぁと今まで思っていました。 SQL文の工夫でここまで出来るものなのですね!(yambejp様にとっては簡単なのでしょうが・・) まだ、このSQL文を他ですぐ使いまわせるほど理解できたわけではないので(汗)このサンプルをもとに色々やってみます! 本当に有難うございました!!!

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

たとえばこんな感じでどうでしょ? SET @NOW:=NOW(); SELECT * ,IF(@NOW BETWEEN start_time AND end_time,1,0) +IF(@NOW >end_time,2,0) +IF(@NOW <start_time,3,0) AS X FROM hogehoge ORDER BY X ASC,(X=2)*start_time ASC,start_time DESC

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

3回ソートするのではなく、まとめちゃえば? SET @NOW:=NOW(); SELECT * ,IF(@NOW BETWEEN start_time AND end_time,1,0) +IF(@NOW >end_time,2,0) +IF(@NOW <start_time,3,0) AS X FROM hogehoge ORDER BY X ASC,start_time DESC ※デバッグしやすくするために、NOW()を直接使わず 変数におとしてあります。

icon_fanta
質問者

補足

>>yambejp様 すごいの一言です。。実現できてしまいました! 実際は、下記のように2回目のDESCに対してのみstart_timeの降順にしなければいけないのですが、yambejp様から頂いたサンプルを参考にしてやってみても、結局思うようにいかず・・・ お時間のあるときで構いませんので、あと一押し、この無知な私にお力をお願いできませんでしょうか? ================================================= SELECT  * FROM hogehoge ( start_time <= NOW() AND end_time >= NOW() ) DESC, (すぐ上でDESCしたものに対してstart_timeの降順に並び替え), ( start_time > NOW() AND end_time >= NOW() ) DESC, (すぐ上でDESCしたものに対してstart_timeの昇順に並び替え), ( start_time < NOW() AND end_time <= NOW() ) DESC, (すぐ上でDESCしたものに対してstart_timeの降順に並び替え); =================================================