ソート用に一時的にフラグ列を設けてもいいし、ORDER BYで直接指定することも可能です。
なお、ORDER BYで一時的な列や式を指定した場合、インデクスがあっても利用されませんので注意してください。
【SQL例1】CASEを使用
select A.shop_id,shop_name,image,news_title,end_date,news_title<>''
from A left join B
on A.shop_id = B.shop_id
where A.shop_id=1
order by
case when end_date<'2007-01-09' then 0 else image end desc,
case when end_date<'2007-01-09' then 0 else news_title<>'' end desc
;
【SQL例2】IFを使用
select A.shop_id,shop_name,image,news_title,end_date,news_title<>''
from A left join B
on A.shop_id = B.shop_id
where A.shop_id=1
order by
if(end_date<'2007-01-09',0,image) desc,
if(end_date<'2007-01-09',0,news_title<>'') desc
;
お礼
色々調べていたら、データの登録のされ方に問題がありました。 データを修正しましたら解決いたしました。 有難うございました。
補足
ご回答有難うございます。 教えていただいたソースで、出来ました。 cace や if が使えると、幅がひろがりますね。 勉強になりました。 ただ、もともと私が出来ていたと思っていたソートが 実は希望の結果になっていない事が判明したのです。 end_date を 条件から外しソートする基準は image ='1'および、news_titleは<>''のデータが上位に来て 次に、image ='1' news_titleは='' のデータ次に image ='0' news_title='' のデータの順でソートしたいのです。 ソートの条件が複数あるということです。 image ='1'をまず、ソートしてしまうと、 news_titleのカラムは <>'' や='' が揃わない状態でソートされます。逆にnews_title <>''を先にソートすると image ='1'のデータが上位にはきません。 この辺の方法はあるのでしょうか? 宜しくお願いします。