- ベストアンサー
MySQLクエリーで会員情報を新しい順に表示する方法
- MySQLのクエリーで会員情報を新しい順に表示する方法について質問があります。
- 現在は登録日時(entry_date)を基準に10件まで表示していますが、最近更新された情報も表示させたいという要望があります。
- 新規登録と編集による更新の両方の日時を考慮して新しい順に表示する方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>>新規登録した際にはentry_date と update_date の両方に同じデータを書き込むしかないでしょうか・・・? 運用的には上記が正解かと。新規登録時に両方埋めて置くと何かと便利です。 どうしてもクエリで解決したいのであればこんなのは如何でしょう? select * from member order by isnull( update_date, entry_date ) desc limit 0, 10 …未検証ですが。動くかなあ。動くと思うんだけど。 要は「update_dateの値が空だったらentry_dateの値を使えば良いじゃない」って言う発想です。 出来なかったらごめんなさい。マジごめんなさい。 しかし繰り返しますが、新規登録時に両方埋めて運用する事をオススメします。 なぜならupdate_dateのないレコードを取得したいと言う状況があった場合でも、entry_dateとupdate_dateの値が同じレコードを引っ張ってくると言う手法を取れば容易に検索可能な上、インディックスをこのカラムに設定しててもこの方法なら高速に検索できるからです。 (IS NULLはインディックスが使用できない!) この辺の理屈については参考URLの「NULLにまつわる諸問題」の項を参照してください。 …ん? update_date = entry_date で検索したら全件検索になるか? なるな。固定値検索じゃ無いからなっちゃうわ。 まあ、ORDER BYとか早くなるだろうし便利な事に違いないから良いや別に。
その他の回答 (2)
- bin-chan
- ベストアンサー率33% (1403/4213)
#1です。一部言葉足らずなので訂正させてください。 [訂正前] Entryしたてのレコードのupdate_dateがnullなら update_dateの代わりにentry_dateを用いる。 [訂正後] Entryしたてのレコードのupdate_dateがnullという仕様なら(みたいなので) update_dateがnullの場合にはupdate_dateの代わりにentry_dateを用いる。
- bin-chan
- ベストアンサー率33% (1403/4213)
MySQLに明るくないんですが。 Entryしたてのレコードのupdate_dateはnullなんですかね?entry_date=update_dateでは無い? entry_date=update_dateならOrderByには update_dateを指定すれば済むこと。 Entryしたてのレコードのupdate_dateがnullなら update_dateの代わりにentry_dateを用いる。 Oracleだったら NVL( update_date, entry_date ) sort_date として Order by sort_date MySQLはifnullみたいですね。 select *, ifnull(update_date,entry_date ) sort_date order by sort_date なのかな?